0
点赞
收藏
分享

微信扫一扫

PAT 素数对猜想 (20 分)

唯米天空 2022-01-20 阅读 53
算法

让我们定义dn​为:dn​=pn+1​−pn​,其中pi​是第i个素数。显然有d1​=1,且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N

输出格式:

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

输入样例:

20

输出样例:

4

 思路解析:

何为素数对:两个相邻素数的差为2。

所以本题的思路很简单,将2-n中的所有素数存到一个数组中去,从前到后枚举数组,看当前元素与后一个元素的差值是否为2。

见代码

#include <iostream>
#include <cstring>
#include <algorithm>
#include<cmath>
using namespace std;
int q[10000];
int Isprime(int n)
{
    if(n==1) return 0;
    else if(n==2) return 1;
    else
        for(int i = 2; i<=sqrt(n);i++)
            if(n%i==0) return 0;
        
    return 1;
    
}
int main()
{
    int cnt = 0;
    int n;
    cin >> n;
    int k = 0;
    for(int i = 2; i <= n ; i++)
    {
        if(Isprime(i)) q[k++] = i;
    }
    for(int i = 1 ;q[i]!=0; i++)
    {
        if(q[i]-q[i-1]==2)  cnt ++;
    }
    cout << cnt <<endl;
    return 0;
    
}
举报

相关推荐

0 条评论