您的位置:首页 > 其它

素数的判断和哥德巴赫猜想的简证

2016-05-28 13:39 211 查看
简述题目要求:

/*设计一函数,判断一整数是否为素数。并完成下列程序设计:

①编写求素数的函数,并用这个函数求 3-200 之间的所有素数

②在 4-200 之间,验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。输出 4=2+2 6=3+3 …… 200=3+197*/

对于素数的判断,我利用了一个bool类型的函数来描述,鉴于题目是从2开始输出,故int num 只考虑了从2开始的情况:

(有一个编程的小技巧,个人愚见:用数据进行试探性验证,进行算法的编写,会更加高效)

注意对sqrt()函数的使用要引入#include头文件

bool primeNum(int num){
if(num==2)
return true;
else{
int i;
double n=num;//注意sqrt()函数要求对double类型的数据处理
for(i=2;i<sqrt(n)+1;i++)//sqrt(n)+1预防其值为整数情况
if(num%i==0)
return false;
if(i>sqrt(n))
return true;
}
}


然后可以用一个循环依次进行数据的判定即可,为了保证代码的完整性,给出如下代码(均写在main函数中):

printf("求3-200 之间的所有素数:\n");
printf("------------------------------------------------------------------------------\n");
int num=0;//用于格式化输出,要在for之外声明,本人渣渣掉过几次坑
for(int i=3;i<=200;i++){
if(primeNum(i)){
cout<<i<<" ";
num++;
if((num+5)%5==0)//保证一行有5个数
printf("\n");
}
}
printf("---------------------------------------------------------------------------\n");


然后就可以验证哥德巴赫猜想了:

//注意:内层for循环的终止条件是j<=i/2,而不是j<i,有兴趣可以试一试
printf("在 4-200 之间,验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。输出 4=2+2 6=3+3 …… 200=3+197:\n");
printf("-----------------------------------------------------\n");
for(int i=4;i<=200;i=i+2){
for(int j=2;j<=i/2;j++){
int temp=i-j;
if(primeNum(j)&&primeNum(temp))
printf("%d=%d+%d  ",i,j,temp);
}
printf("\n");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: