【题目描述】哥德巴赫猜想是说任何一个大于2的偶数都能表示成两个素数之和。编写一个C程序,验证指定范围内哥德巴赫猜想的正确性,区间内的范围要从键盘输入。
【代码】
#include <stdio.h>
int main()
{
int a, b,d,m,n,s1,s2;
int flag = 0;
printf("请输入验证的范围,均要求大于等于4:(如:1,2)");
scanf_s("%d,%d", &a, &b);
if (a % 2 == 0)
{
for (d = a; d <= b; d += 2)
{
for (m = 2; m <= d - 2; m++)
{
for (n = 2; n <= m - 1; n++)
{
if (m % n == 0) break;
}
if (n >= m)
{
s1 = d - m;
for (s2 = 2; s2 <= s1 - 1; s2++)
{
if (s1 % s2 == 0) break;
}
if (s2 >= s1)
{
printf("%d是满足条件的偶数\n", d);
flag = 1;
break;
}
else flag = 0;
}
else flag = 0;
}
}
}
else
{
for (d = a+1; d <= b; d += 2)
{
for (m = 2; m <= d - 2; m++)
{
for (n = 2; n <= m - 1; n++)
{
if (m % n == 0) break;
}
if (n >= m)
{
s1 = d - m;
for (s2 = 2; s2 <= s1 - 1; s2++)
{
if (s1 % s2 == 0) break;
}
if (s2 >= s1)
{
printf("%d是满足条件的偶数\n", d);
flag = 1;
break;
}
else flag = 0;
}
else flag = 0;
}
}
}
if (flag == 1)
{
printf("在此范围内哥德巴赫猜想是正确的\n");
}
if (flag == 0)
printf("在此范围内哥德巴赫猜想是错误的\n");
return 0;
}
【说明】输入两个数值存入a,b,要判断一下a的奇偶性,如果是奇数,那么这个判断的偶数要从a+1开始,如果是偶数,那么直接从a开始。
然后再去遍历素数,第一个素数的范围是2到(这个偶数),第二个数的范围是2到(这个偶数减去第一个素数),如果找的这个第二个数是一个素数,那么就证明这个偶数是符合条件的,把flag值设为1。否则flag就是0。
值得注意的是,第二个素数一经找到,也即知道这个偶数是符合的,要break退出循环,因为这时是循环嵌套,找到后可能还会遍历多次,改变结果。