目录
1. 哥德巴赫思想的解释
哥德巴赫猜想:任何充分大的偶数都可由两个素数之和来表示,如 4=2+2,6=3+3,8=3+5······
2. 程序设计思路
(1)首先调用 scanf ,获取键盘输入的一个数,设为 n
(2)用 if 语句判断输入值 n 是否为偶数 (详见2.1)
(3)写一个函数 prime 判断 n 的两个加数 a,b(a>b) 是否为素数 (详见2.2)
注意 !(4)明确 b 需要满足的条件(详见2.3)
2.1 判断输入值是否为偶数
printf("请输入一个偶数:>");
scanf("%d", &n);
if (n % 2 == 0) //判断 n 是否为偶数
{
}
2.2 写 prime 函数判断一个数是否为素数
//判断一个数是否为素数
int prime(int i)
{
if (i >= 2)
{
int j = 2;
for (j = 2; j <= sqrt(i); j++) //运用数学思想,若一个实数不能被其平方根前所有 > 2 的整数整除,则为素数
{
if (i % j == 0)
return 0;
}
return 1;
}
else
return 0;
}
2.3 加数 b 要满足的条件
若没加 b 的条件,仅仅通过判断a,b是否为素数打印结果,见代码如下:
if (prime(a) && prime(b)) //调用 prime函数,判断a,b是否为素数。
{
printf("%d=%d+%d\n", n, a, b);
}
打印结果如下:
显然,图中 第2 结果并不是我们所想要的。第2项 结果与第1项 在实际意义上是重复的。
因此,为避免打印结果重复,增加条件 b >= n/2,即可符合要求。
改善后代码如下:
if (prime(a) && prime(b) && b >= n / 2) //调用 prime函数,判断a,b是否为素数。并且b要满足所述条件
{
printf("%d=%d+%d\n", n, a, b);
}
打印结果如下:
3. 完整程序代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
//判断一个数是否为素数
int prime(int i)
{
if (i >= 2)
{
int j = 2;
for (j = 2; j <= sqrt(i); j++) //运用数学思想,若一个实数不能被其平方根前所有 > 2 的整数整除,则为素数
{
if (i % j == 0)
return 0;
}
return 1;
}
else
return 0;
}
int main()
{
int n, a, b; //a,b为 n 的两个加数
input: //在此运用 goto 语句,若输入错误,可返回重新输入
printf("请输入一个偶数:>");
scanf("%d", &n);
if (n % 2 == 0) //判断 n 是否为偶数
{
for (a = 2; a < n; a++)
{
b = n - a;
if (prime(a) && prime(b) && b >= n / 2) //调用 prime函数,判断a,b是否为素数。并且b要满足所述条件
{
printf("%d=%d+%d\n", n, a, b);
}
}
}
else
{
printf("输入错误,请重新输入\n\n");
goto input;
}
return 0;
}