C语言验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。

例如,6=3+3,8=3+5,…,18=5+13。要求将6~100之间的偶数都表示为两个素数之和,输出时一行输出五组。
【输入形式】
无输入
【输出形式】
按从小到大、每组五行,每组间用一个空格分隔。
每组的格式为:%4d=%2d+%2d。
帮我看一下我错在哪里,输出没有东西
#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,n,m,k,count;
count=0;
for(n=6;n<=100;n+=2){
for(a=3;a<=n/2;a++)
for(m=2;m<=a/2;m++)
if(a%m==0)
break;
if(m>a/2)

b=n-a;
for(k=2;k<=b/2;k++)
if(b%k==0)
break;
if(k>b/2)
printf("%d=%d+%d",n,a,b);
count++;
if(count%5==0)
printf("\n");

}

return 0;
}

1、基于sympy的素数判定。

2、看看100是否可以写成两个素数的和。

3、908有15种方法,写成两个素数的和。

4、看看10到1000之间的偶数,最多有多少种方法可以写成两个素数的和。答案是52。

5、看看1000以内的偶数,有多少个数字有52种方法可以写成两个素数的和。恰好有一个。

6、看看1000以内的偶数,有哪些数字只有1种方法可以写成两个素数的和。只有12。

7、看看10000以内的偶数,有哪些数字只有1种方法可以写成两个素数的和。这个过程耗时长达3分钟,答案仍旧是只有12。

8、看看2000以内的偶数,有哪些数字不可以写成两个素数的和。这个反例不可能在2000以内找到,也就没有任何返回。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-08

修改如下

#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,n,m,k,count;
count=0;
for(n=6;n<=100;n+=2){
for(a=3;a<=n/2;a++)
{
for(m=2;m<=a/2;m++)
if(a%m==0)
break;
    if(m>a/2)
b=n-a;
for(k=2;k<=b/2;k++)
if(b%k==0)
break;
if(k>b/2)
{
printf("%d=%d+%d ",n,a,b);
count++;
break;//对于每个数 只输出一组,如果要全输出的话,去掉这个break;
}
}
if(count%5==0)
printf("\n");

}

return 0;
}

追问

去掉break 运行结果中混入了非素数加素数 这怎么办大神

追答#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,n,m,k,count;
count=0;
for(n=6;n<=100;n+=2){
for(a=3;a<=n/2;a++)
{
for(m=2;m<=a/2;m++)
if(a%m==0)
break;
    if(m>a/2)
b=n-a;
else continue;
for(k=2;k<=b/2;k++)
if(b%k==0)
break;
if(k>b/2)
{
printf("%d=%d+%d ",n,a,b);
count++;
//break;//对于每个数 只输出一组,如果要全输出的话,去掉这个break;
}
}
if(count%5==0)
printf("\n");

}

return 0;
}

试试这个 加了一个else continue;

追问

但又不是每组5行了 是count位置不对吗

追答

这种情况下一个循环可能输出多组数据

所以输出换行的判断要加到里面

可以

#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,n,m,k,count;
count=0;
for(n=6;n<=100;n+=2){
for(a=3;a<=n/2;a++)
{
for(m=2;m<=a/2;m++)
if(a%m==0)
break;
    if(m>a/2)
b=n-a;
else continue;
for(k=2;k<=b/2;k++)
if(b%k==0)
break;
if(k>b/2)
{
printf("%d=%d+%d ",n,a,b);
count++;
if(count%5==0)
printf("\n");
//break;//对于每个数 只输出一组,如果要全输出的话,去掉这个break;
}
}

}

本回答被提问者采纳
第2个回答  2019-11-26
因为10000以内的素数有1229个。奇偶数分别有5000个,小于等于6的偶数有3个,所以偶数为4997个,4997是1229的4倍左右,所以可知道,一个偶数可以分为无数个数之和等于它,这其中几个数中至少有两个是素数,因此大于6的偶数都可以表示为两个素数之和。
相似回答