题目描述
在质数的大家庭中,大小之差不超过2的两个质数称它俩为一对孪生素数,如2和3、3和5、17和19等等。请你统计一下,在不大于自然数N的质数中,孪生素数的对数。
输入
只有一行,一个自然数N。(N<=10^6)
输出
只有一行,一个整数,表示N以内孪生素数的对数。
样例输入复制
20
样例输出复制
5
素数筛法
#include <iostream>
using namespace std;
const int maxn = 1000000+5;
int n;
bool book[maxn];
void primer_sieve()
{
book[0] = book[1] = false;
for (int i = 2; i <= n; i++) book[i] = true;
for (int i = 2; i * i <= n; ++i)
if (book[i])
{
for (int j = 2 * i; j <= n; j += i)
book[j] = false;
}
}
int func()
{
int sum = 0;
if (n >= 3) sum++;
for (int i = 3; i + 2 <= n; i += 2)
if (book[i] && book[i + 2]) sum++;
return sum;
}
int main()
{
cin >> n;
primer_sieve();
cout << func() << endl;
return 0;
}