最近在自学编程,找出了大一时学C语言的教材,有一道循环结构的课后习题需要用C语言实现验证哥德巴赫猜想,觉着挺有趣,就把写代码的过程记录下来。
实现思路
首先要知道哥德巴赫猜想的内容:
“任意一个大于等于6的偶数,都可以表示为两个素数的和。”
这个问题中最重要的是素数的实现过程,素数的概念是除1和它本身之外,没有其他的约数。我的思路为:
- 用键盘接收一个大于等于6的偶数,定义变量num接收;
- 使用for循环遍历2~num/2之间的数,找到这些数中的素数n1;
- 找到n1之后继续使用for循环遍历num/2~num之间的数,找到这些数中的素数n2,当n1+n2 == num时输出表达式。
上代码:
int num = 0;//用于接受从键盘上输入的大于等于6的偶数 ?? ?int i, j;//定义循环变量 ?? ?int n1 = 0;//初始化第一个素数 ?? ?int n2 = 0;//初始化第二个素数 ?? ?printf("请输入一个大于等于6的偶数:"); ?? ?scanf_s("%d", &num); ?? ?if (num >= 6) { ?? ??? ?for (n1 = 2; n1 < (num / 2); n1++){//遍历2~num/2之间的数,作为第一个素数 ?? ??? ??? ?for (i = 2; i <= n1; i++){ ?? ??? ??? ??? ?if (n1 % i == 0 && n1 != i){//判断n1有没有除1和它本身之外的因数,若有,则退出当前循环,进行下一次判断; ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?if (i > n1){//如果n1为质数,则上循环执行完毕 ?? ??? ??? ??? ?for (n2 = (2 / num); n2 < num; n2++){//判断下一个质数 ?? ??? ??? ??? ??? ?for (j = 2; j <= n2; j++){ ?? ??? ??? ??? ??? ??? ?if (n2 % j == 0 && n2 != j){ ?? ??? ??? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?if (j > n2){ ?? ??? ??? ??? ??? ??? ?if (n1 + n2 == num){ ?? ??? ??? ??? ??? ??? ??? ?printf("\n%d = %d + %d", num, n1, n2); ?? ??? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ?else { ?? ??? ?printf("请输入大于等于6的数字!\n"); ?? ?} |
?
?
?
|