让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<10^5),请计算不超过N的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N。
输出格式:
在一行中输出不超过N的满足猜想的素数对的个数。
输入样例:
20
1
输出样例:
4
思路:埃式筛法。
#include <cstdio>
const int maxn = 100010;
int prime[maxn], Pnum = 0;
bool p[maxn] = {false};
void Find_Prime() {
for (int i = 2; i < maxn; i++) {
if (!p[i]) {
prime[Pnum++] = i;
for (int j = i * 2; j < maxn; j += i) {
p[j] = true;
}
}
}
}
int main() {
int N;
scanf("%d", &N);
Find_Prime();
int ans = 0;
for (int i = 0; i < Pnum - 1 && prime[i + 1] <= N; i++) {
if (prime[i + 1] - prime[i] == 2) {
ans++;
}
}
printf("%d", ans);
return 0;
}
也可以用其他方法获取素数:link。