PAT B1007 素数对猜想 (20 分)

Posted tccbj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT B1007 素数对猜想 (20 分)相关的知识,希望对你有一定的参考价值。

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

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

输入格式:

输入在一行给出正整数N

输出格式:

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

输入样例:

20

输出样例:

4
#include <stdio.h>
#include <algorithm>
#include <string>
#include <map>
#include <iostream>
#include <stack>
#include <math.h>
using namespace std;
const int maxn = 100010;
int index[maxn] = { 0 };
bool isPrime(int i){
    for (int k = 2; k <= sqrt(i); k++){
        if (i%k == 0)return false;
    }
    return true;
}
int main(){
    int n, count = 0;
    cin >> n;
    if (n == 1 || n == 2){
        cout << 0;
        return 0;
    }
    for (int i = 2; i <= n; i++){
        if (isPrime(i)){
            index[i] = 1;
            
        }
    }
    for (int i = 2; i <= n-2; i++){
        if(index[i]==1 && (index[i + 2] - index[i] == 0))count++;
    }
    cout << count;
    system("pause");
}

注意点:素数的判定一直是一个重点,本以为判断到平方根也会超时,结果没有还算好,有时间要去看一下时间复杂度最低的素数判定方法。这里我是把所有素数都存起来,用了hash,也可以生成一个判断一个,可以省点内存。

以上是关于PAT B1007 素数对猜想 (20 分)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA1007 素数对猜想 (20分) PAT乙级 PAT (Basic Level) Practice (中文)

PAT Basic 1007 素数对猜想 (20 分)

PAT乙级1007 素数对猜想 (20 分)

PAT Basic 1007 素数对猜想 (20) [数学问题-素数]

PAT-1007素数对猜想

1007 素数对猜想 (20 分)