孪生素数

574 词

题目描述

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

输入

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

输出

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

样例输入

1
20

样例输出

1
5

题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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;
}