10立方油罐:C语言问题?

来源:百度文库 编辑:高考问答 时间:2024/05/12 12:10:01
验证歌德巴赫猜想: 一个大于6的偶数是两个素数的和?
我编写的:
#include <stdio.h>
#include <math.h>
main ()
{
int a,i,j,a2;
printf("Input data:");scanf("%d",&a);
for(i=2;i<=a/2;i++)
{
if(a%i==0)
break;
else
{
a2=fabs(a-i);
for(a2=2;a2<=a/2;a2++)
if(a%2==0)
break;

}
printf("%d=%d+%d \n",a,i,a2);
}

getch();
}

有问题,请高手在原有的基础上改正一下.不要重新编写的.谢谢!~!

#include <stdio.h>
#include <math.h>
main ()
{ int a,i,j,k,a2;
printf("Input data:");
scanf("%d",&a);
for(i=2;i<=a/2;i++)
{ for(k=2;k<=sqrt(i);k++)
if(i%k==0) break;
if(k>sqrt(i))
{ a2=fabs(a-i);
for(k=2;k<=sqrt(a2);k++)
if(a2%k==0) break;
if(k>sqrt(a2)) printf("%d=%d+%d \n",a,i,a2); }
}
getch();
}

逻辑错了啊,你意思是说如果a%i不等于0的话i就是一个素数?判断素数没这么简单。素数的条件是:只有当此数不能被小于它的平方根且不为1的所有整数整除时,才可以确定此数是素数。

#include <stdio.h>
#include <math.h>
int isprime(int a)/*加了一个判断素数的函数*/
{
int j;
for(j=2;j<=a/2;j++)
if(a%j==0) return 0;
return 1;
}
main ()
{
int a,i,j,a2;
printf("Input data:");
scanf("%d",&a);
for(i=2;i<=a/2;i++)
{
if(!isprime(i)) continue;
a2=fabs(a-i);
if(!isprime(a2)) continue;
printf("%d=%d+%d \n",a,i,a2);
}
getch();
}