题目描述

在质数的大家庭中,大小之差不超过2的两个质数称它俩为一对孪生素数,如2和3、3和5、17和19等等。请你统计一下,在不大于自然数N的质数中,孪生素数的对数。

输入

只有一行,一个自然数$N$ $(N<=10^6)$

输出

只有一行,一个整数,表示N以内孪生素数的对数。

样例输入

20

样例输出

5

题解

#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 1e6+100;
bool p[maxn];
void Fill(){
    for(bool & i : p)i=true;
    p[0]=p[1]=false;
    for(long long i=2;i*i<=maxn;i++)if(p[i])for(long long j=2*i;j<maxn;j+=i)p[j]=0;
}
int main() {
    int n;
    int t=0;
    cin>>n;
    Fill();
    if(n>=3)++t;
    for(int x=3;x+2<=n;x+=2)if(p[x]&&p[x+2])++t;
    cout<<t;
    return 0;
}