我写了一个程序是验证哥德巴赫猜想的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;
} 展开
#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;
} 展开
展开全部
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;
}
第二是(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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询