问题:2000以内的不小于4的正偶数都能够分解为两个素数之和。(哥德巴赫猜想对2000以内的正偶数成立) 重庆邮电大学复试
用C语言实现。
思路:由题意,我们设置一个循环,从i=4开始,到2000结束,每次让i加2(保证是偶数)。将每次循环的数拆成两个数,若这两个数都是素数,则验证成功。如何拆分呢?我们知道1不是素数,2是偶数中唯一的素数,因此我们还需要一个循环,这个循环从2开始,一直到j/2结束。这个循环的作用是为了拆分这个偶数i,每次循环会判断 j 和 i-j 是不是素数,如果是则打印出来,进入外层的下一轮循环,如果不是,则让j++,继续拆分判断。判断是不是素数的过程我们另外编写一个函数int fun(int j),其p判断方法就是我们熟知的判断素数方法这里不再赘述。这就是大致的原理。C语言代码如下:(在VS2008环境下测试无误)
#include<stdio.h>
int fun(int j){ //判断素数
if(j==2)
return1;
if(j%2==0&& j!=2)
return 0;
for(int m=2;m<j;m++)
if(j%m==0)
return0;
return 1;
}
int main(){
int i,j;
int flag;//标记
for(i=4;i<=2000;i+=2){
flag=0;
for(j=2;j<=i/2;j++){
if(fun(j)){
if(fun(i-j)){
flag=1;
printf("%d 符合验证,可分解成两个素数: %d %d \n",i,j,i-j);
break;
}
}
}
}
return 0;
}
希望能对大家有所帮助。