简述题目要求:
/*设计一函数,判断一整数是否为素数。并完成下列程序设计:
①编写求素数的函数,并用这个函数求 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");
}