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

1007 素数对猜想 (20 分)

原题链接
[PAT 乙级]1007 素数对猜想 (20 分)


用素数打表实现prime记录所有素数即可。

void getprime(int n) {
    book[1] = book[0] = 1;
    for (int i = 2; i <= n;i ++) {
        if (book[i] == 0) {
            prime.push_back(i);
            for (int j = i + i; j <= n; j += i) {
                book[j] = 1;
            }
        }
    }
}

代码如下:

#include<iostream>
#include<vector>
using namespace std;
vector<int >prime;
bool book[100010];
void getprime(int n) {
    book[1] = book[0] = 1;
    for (int i = 2; i <= n;i ++) {
        if (book[i] == 0) {
            prime.push_back(i);
            for (int j = i + i; j <= n; j += i) {
                book[j] = 1;
            }
        }
    }
}
int main () {
    int n, cnt = 0;
    cin >> n;
    getprime(n);
    prime.push_back(99999999);
    for (int i = 1;prime[i] <= n; i++) {
        if(prime[i] - prime[i - 1] == 2) {
            cnt ++;
        }
    }
    cout << cnt;
    return 0;
}