我写了一个程序是验证哥德巴赫猜想的6到100的偶数,大于等于6的偶数等于2个素数之和,比如6=3+3,

但得不出结果求解#include<stdio.h>intprime(intm);intmain(void){inti,n,m,pri,c,count=0;for(i=6;... 但得不出结果 求解
#include<stdio.h>
int prime(int m);
int main(void)
{
int i,n,m,pri,c,count=0;
for(i=6;i<=100;i+=2)
{printf("%d\n",i);
for(m=2;m<=i;m++){
if(prime(m)==1)
pri=m;
for(n=2;n<=i;n++)
if(prime(n)==1)
c=n;
if(i=pri+c)
{
printf("%d=%d+%d ",i,pri,c);count++;break;
}
}
if(count%5==0)
printf("\n");
}
return 0;
}
int prime(int m)
{
int result,j;
for(j=2;j<=m/2+1;j++)
if(m%2==0)
break;
if(j>=m/2)
result=1;
return result;
}
展开
1812573723
2012-04-21 · TA获得超过2355个赞
知道小有建树答主
回答量:943
采纳率:88%
帮助的人:886万
展开全部
prime函数有点小错误,第一是(m%2==0)应该是(m%j==0),
第二是(j>=m/2)应该是(m%j!=0),为什么这么说呢,想想m=4的情况就知道了。
主程序中也有点小错误
for(n=2;n<=i;n++)
if(prime(n)==1)
c=n;
if(i=pri+c)
{
printf("%d=%d+%d ",i,pri,c);count++;break;
}
这一段应该多加一个大括号,改成:
for(n=2;n<=i;n++)
{
if(prime(n)==1)
c=n;
if(i=pri+c)
{
printf("%d=%d+%d ",i,pri,c);count++;break;
}
}
这样改之后对倒是对了,但是程序完全可以更简洁明白且高效,比如:
#include<stdio.h>
int prime(int m);
int main(void)
{
int i,m,c,count=0;
for (i=6;i<=100;i+=2)
{
printf("%d: ",i);
for (m=3;m<=i/2;m+=2)
if (prime(m)&& prime(i-m))
{
printf("%d=%d+%d ",i,m,i-m);count++;break;
}
if(count%5==0)
printf("\n");
}
return 0;
}
int prime(int m)
{
int j;
for(j=2;j<=m/2+1;j++)
if(m%j==0)
return 0;
return 1;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式