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

来源:互联网 发布:知无涯者电影观后感 编辑:程序博客网 时间:2024/05/09 18:21

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