验证哥德巴赫猜想,输入任一大于二的偶数,输出两素数。
#include <stdio.h>
int main()
{
int m,a,b=0,c=0,d,e,n,i,j;
scanf("%d",&m);
for(i=3;i<m;i=i+2)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
b=1;
break;/*判断i是否为素数*/
}
}
e=i;
d=n-e;
for(j=2;j<m/2;j++)
{
if(d%j==0)
{
c=1;
break;/*判断d是否为素数*/
}
}
if(b==0&&c==0&&e!=d)
{
if(d>m/2)
{
printf("%d %d\n",e,d);/*输出数据从小到大排序,多种情况换行*/
}
}
b=0;c=0;
}
return 0;
}
以下是改好的程序,结合了上面两位大神的回答
#include <stdio.h>
int main()
{
int m,b=0,c=0,d,e,i,j;
scanf("%d",&m);
for(i=3;i<m;i=i+2)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
b=1;
break;
}
}
e=i;
d=m-e;
for(j=2;j<d/2;j++)
{
if(d%j==0)
{
c=1;
break;
}
}
if(b==0&&c==0&&e!=d)
{
if(d>m/2)
{
printf("%d %d\n",e,d);
}
}
b=0;c=0;
}
return 0;
}
为什么i从3开始循环。很明显,输入4你就得不到结果
还有下面的循环目测不是m/2而是d/2
还有是d=m-e,n你没用到。
给你修改了下,你参考下
#include <stdio.h>
int main()
{
int m,a,b=0,c=0,d,e,i,j;
scanf("%d",&m);
for(i=2;i<m;i++)
{
for(j=2;j<i;j++)
{
if(i%j==0)
{
b=1;
break;/*判断i是否为素数*/
}
}
if (i == 2) b=0;
e=i;
d=m-e;
for(j=2;j<d/2;j++)
{
if(d%j==0)
{
c=1;
break;/*判断d是否为素数*/
}
}
if (d < 2) c=1;
if(b==0&&c==0&&e!=d)
{
if(d>m/2)
{
printf("%d %d\n",e,d);/*输出数据从小到大排序,多种情况换行*/
}
}
b=0;c=0;
}
return 0;
}