哥德巴赫猜想:一个不小于6的偶数,总能分解成两个质数之和。
#include(stdio.h)
#include(math.h)
boolean isPrime(int num);
boolean isGoldbachConjecture(int arrange);
boolean GoldbachConjecture(int arrange){
boolean isGoldbachRight;
boolean found;
int num;
int i;
for(num = 6,isGoldbachRight =1;isGoldbachRight&&num<=arrange;num+=2){
//例如:6=3+3;
//24=3+(24-3);
//24=5+(24-5);
//24=7+(24-7);
//24=9+(24-9);
//这是下面这个循环的手工过程。
for(i=3,found=-1;!found&&i<=num/2;i+=2){
if(isPrime(i)&&isPrime(num-i)){
found=1;
}
}
if(!found){
isGoldbachRight = -1;
printf("%d\n",num);
}
}
return isGoldbachRight;
}
boolean isPrime(int num){ //判断是否是质数
int i;
int maxNum = (int)(sqrt(num));
if(num>2&&num%2 == 0){
return -1;
}
for(i=3;i<maxNum&&num%i;i+=2){
}
return i>maxNum;
}
int main(){
int num;
printf("请输入范围:");
scanf("%d",&num);
if(GoldbachConjecture(num)==-1){
printf("哥德巴赫猜想错了!");
}esle{
printf("哥德巴赫猜想从6到%d是正确的\n",num);
}
return 0;
}
但是这个程序对于7位数以上的数据,会非常耗时!!!后续更新更好的算法!!!