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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值