验证哥德巴赫猜想(C语言),烦躁出错。

本人自学C语言,目前学到循环,然后那本鸟书给出这样一个例题,
验证哥德巴赫猜想:任意一个不小于6的偶数总能表示成两个素数之和。
然后就给出下面这样一个程序。
经过我用VC验证,此程序错误!根本做不到题目要求。希望高手能给指出错误,并给我一个准确的程序。
注意!!!本人小白,连这个错误程序都看不懂,真的是一点点都不懂,所以希望高手们给出答案的同时,能把步骤都标上注释,让我这个小白明白每一步都是干吗用的。在此谢过。

main()
{
int a,b,c,d;
scanf("%d",&a);
for(b=3;b<=a/2;b+=2)
{
for(c=2;c<=sqrt(b);c++)
if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
else break;
for(c=2;c<=sqrt(d);c++)
if(d%c==0) break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,c);
}
}

#include <stdio.h>
#include <math.h>
void main()
{
int a,b,c,d; /*初始化*/
scanf("%d",&a); /*输入一个数,应不小於6的偶数*/
for(b=3;b<=a/2;b+=2) /*从3开始,到该数1/2的,循环,步长为2,因为2这个素数与其他素数相加都不是偶数*/
{
for(c=2;c<=sqrt(b);c++) /*以下三行是为了求第一个加数,sqrt是开根号函数*/
if(b%c==0) break;
if(c>sqrt(b)) /*这两行判定这个数是不是素数*/
d=a-b;
else
continue; /*确定是素数以后,用减法求出另一个加数*/
for(c=2;c<=sqrt(d);c++) /*这三行同上面部分*/
if(d%c==0) break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d); /*两者皆为素数时,给予输出*/
}
}

已改正,编译通过了,感谢朋友指正,确实漏掉了这句,楼主的程序里最后一行的输出也有错,这样就可以了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-03-10
楼上的太可爱了,程序都错了还努力加注释。

原程序就一点错误:
else break; 改成else continue;
这里还有一种解法:
http://zhidao.baidu.com/question/86770310.html
第2个回答  2009-03-11
我用C++做的,自己改成C吧。
#include <iostream>
using namespace std;
bool prime(int num)
{

int i;
for(i=2;i<num;i++)
{
if(num%i==0)
break;
}
if(i==num)
return true;
else
return false;
}

int main()
{
int even;
cout<<"input an even:";
cin>>even;
int i,j;
for(i=2;i<even;i++)
{
if(prime(i))
j=even-i;
if(prime(j))
break;
}
if(i==even)
cout<<"guess wrong"<<endl;
else
cout<<i<<" "<<j<<endl;
return 0;
}
第3个回答  2009-03-10
%d是十进制
&是赋值
相似回答
大家正在搜