#include <stdio.h>
#include <stdlib.h>
//判断一个数字是不是素数
int isPrame(int value){
//如果这个数字小于3就是素数
if(value<=3){
return 1;
}
int i;
for(i=2;i<value;i++){
if(value%2==0){
break;
}
}
if(value==i){
return 1;
}else{
return 0;
}
}
main() {
//循环变量i
int jianshu,beijianshu,cha;
//验证通过的数字个数
int count=0;
//1-2000偶数的个数
int countou=0;
//被减数范围1-2000
for(beijianshu=1;beijianshu<=2000;beijianshu++){
//判断被减数是不是偶数
if(beijianshu%2==0){
countou++;
//减数的范围
for(jianshu=1;jianshu<beijianshu;jianshu++){
//如果减数和差都是素数
if(isPrame(jianshu)==1&&isPrame(beijianshu-jianshu)==1){
//验证通过的数字个数 ++
count++;
//因为满足条件的个数很多,所以有一个可以即可,如,4=1+3;4=2+2;4=3+1;都是可以的,所以满足一个即可
break;
}
}
}
}
//如果验证的偶数的个数等于1-2000的偶数的个数,猜想正确
if(count==countou){
printf("猜想正确!%d",count);
}
}
验证歌德巴赫猜想
所谓歌德巴赫猜想是说任何一个大于2的偶数都能表示成为两个素数之和。应用计算机工具可以很快地在一定范围内验证歌德巴赫猜想的正确性。请编写一个C程序,验证指定范围内歌德巴赫猜想的正确性,也就是近似证明歌德巴赫猜想(因为不可能用计算机穷举出所有正偶数)。
题目分析:
可以把问题归结为在指定范围内(例如:1~2000内)验证其中每一个偶数是否满足歌德巴赫猜想的论断,即是否能表示为两个素数之和。如果发现一个偶数不能表示为两个素数之和,即不满足歌德巴赫猜想的论断,则意味着举出了反例,从而可以否定歌德巴赫猜想。