哥德巴赫猜想问题
德国数学家哥德巴赫(Goldbach)在1725年写给欧拉(Euler)的信中提出了以下猜想:任何大于2的偶数,均可表示为两个素数之和(俗称为1+1)。近三个世纪了,这一猜想既未被证明,也未被推翻(即未找到反例)。请编写一个程序,在有限范围内(例如4~2000)验证哥德巴赫猜想成立。请注意:这只是有限的验证,不能作为对哥德巴赫猜想的证明。
分析:
要将整数分解成两部分,然后判断分解出的两个整数是否都为素数。如是,则输出;否则,重新分解、判断。
程序如下:
#include "stdio.h"
#include "math.h"
main( )
{ int fflag(int i);
int i,n;
for(i=4; i<=2000; i+=2)
{for(n=2;n if(fflag(n)) /*分别判断两个整数是否均为素数*/
if(fflag(i-n))
{printf("%d=%d+%d\n",i,n,i-n); /*如均为素数则输出*/
break;
}
if(n==i)printf("error %d\n",i);
}
}
int fflag(int i) /*判断整数是否为素数*/
{ int j;
if(i<=1) return(0);
if(i==1) return(1);
if(!(i%2)) return(0); /*if no, return 0*/
for(j=3;j<=(int)(sqrt((double)i)+1);j+=2)
if(!(i%j)) return(0);
return(1); /*if yes, return 1*/
}
请思考:如果在范围4~1 000 000内验证哥德巴赫猜想,该程序如何修改?
分析:
要将整数分解成两部分,然后判断分解出的两个整数是否都为素数。如是,则输出;否则,重新分解、判断。
程序如下:
#include "stdio.h"
#include "math.h"
main( )
{ int fflag(int i);
int i,n;
for(i=4; i<=2000; i+=2)
{for(n=2;n if(fflag(n)) /*分别判断两个整数是否均为素数*/
if(fflag(i-n))
{printf("%d=%d+%d\n",i,n,i-n); /*如均为素数则输出*/
break;
}
if(n==i)printf("error %d\n",i);
}
}
int fflag(int i) /*判断整数是否为素数*/
{ int j;
if(i<=1) return(0);
if(i==1) return(1);
if(!(i%2)) return(0); /*if no, return 0*/
for(j=3;j<=(int)(sqrt((double)i)+1);j+=2)
if(!(i%j)) return(0);
return(1); /*if yes, return 1*/
}
请思考:如果在范围4~1 000 000内验证哥德巴赫猜想,该程序如何修改?