题面
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<10^5),请计算不超过N
的满足猜想的素数对的个数。
输入
输入在一行给出正整数N
。
输出
在一行中输出不超过N
的满足猜想的素数对的个数。
样例输入
样例输出
提示
无
思路
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| const int mxn = 1e5 + 5; int n, m;
bool isP[mxn]; int prime[mxn];
int euler(int n) { memset(isP, 1, sizeof isP); isP[0] = isP[1] = 0;
int cnt = 0; for (int i = 2; i <= n; i++) { if (isP[i]) prime[++cnt] = i; for (int j = 1; j <= cnt; j++) { if (i * prime[j] > n) break; isP[i * prime[j]] = 0; if (i % prime[j] == 0) break; } } return cnt; }
int a[mxn];
int main() { int cnt = euler(N); memset(a, 0, sizeof a); for (int i = 3; i <= N; i++) { if (isP[i] && isP[i - 2]) a[i] = a[i - 1] + 1; else a[i] = a[i - 1]; } scanf("%d", &n); printf("%d\n", a[n]); return 0; }
|