1007 素数对猜想

该博客介绍了一个C++程序,用于计算不超过给定正整数N的素数对(相差为2的素数对)的数量。程序利用了素数分布的性质,只检查6k±1形式的数,并通过判断它们是否为素数来找到素数对。当找到符合条件的素数对时,计数器增加。
摘要由CSDN通过智能技术生成

1007 素数对猜想

引入:
在这里插入图片描述

输入格式:
输入在一行给出正整数N。

输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

语言:
c++

分析: 素数总是 6k-1(k=1,2,3… …)或者6k+1(k=1,2,3… …),所以每次只判断 6k 两侧的数即可(6k、6k+1、6k+2… …、6k+5只有里6k+1和6k+5可能为素数,6k+5等价于6k-1)。
再判断一个数是否为素数时只需要判断从2到根号n的数能否被n整除,如果存在可以被整除的数则不是素数,两者中其中一个不是素数则不符合“素数对猜想”,令flag=0,则符合要求的素数对数量不变;两者都是素数且相差为2时flag=1,符合要求的素数对数量则需要加1。

#include<iostream>
#include<cmath>
using namespace std;

int main(){
    int N;
    cin >> N;
    if (N >= 5){
        int k=1;
        int count=1;
        while (6 * k + 1 <= N){
            int a = 6 * k - 1;
            int b = 6 * k + 1;
            int a_sqrt = (int)sqrt(a);
            int b_sqrt = (int)sqrt(b);
            int flag = 1;
            for (int i = 2; i <= a_sqrt; i++){
                if (a % i == 0) flag = 0;
            }
            for (int i = 2; i <= b_sqrt; i++){
                if (b % i == 0) flag = 0;
            }
            if (flag == 1) count++;
            k++;
        }
        cout << count;
        return 0;
    }
    else{
        cout << 0;
        return 0;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值