https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744
素数对猜想认为:“存在无穷多对相邻且差为2的素数”。
给定一个正整数n,请计算不超过n的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
素数打表,时间复杂度 O ( n l o g l o g n ) O(nloglogn) O(nloglogn)
#include <iostream>
using namespace std;
const int maxn = 100010;
int prime[maxn]; // 存放所有素数
int tot; // 素数的个数
bool p[maxn]; // p[i]=true代表p[i]是素数
// maxn以内的素数放进prime[]中
void findPrime(int n)
{
for (int i = 1; i <= n; i++)
p[i] = 1;
for (int i = 2; i <= n; i++)
{
if (p[i])
{
prime[tot++] = i;
for (int j = i; j <= n / i; j++)
p[i * j] = false;
}
}
}
int main()
{
int n;
cin >> n;
findPrime(n);
int ans = 0;
for (int i = 1; i < tot; i++)
{
if (prime[i] - prime[i - 1] == 2)
ans++;
}
cout << ans << endl;
return 0;
}