德国数学家哥德巴赫(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内验证哥德巴赫猜想,该程序如何修改?