让我们定义
d
n
d_n
dn为:
d
n
=
p
n
+
1
−
p
n
d_n=p_{n+1} − p_n
dn=pn+1−pn,其中
p
i
p_i
pi
是第
i
i
i个素数。显然有
d
1
d_1
d1 =1,且对于
n
>
1
n>1
n>1有
d
n
d_n
dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(
<
1
0
5
<10^5
<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
解题思路:
素数判断法: I s P r i m e ( ) IsPrime() IsPrime() 函数判断 n n n 以内的素数并保存到数组 p r i m e prime prime
答案代码:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
const int maxn = 10005;
int prime[maxn] = {0};
bool IsPrime(int n) {
if (n < 2) return false;
int limit = int(sqrt(n*1.0));
for (int i = 2; i <= limit; i++)
if (n % i == 0) return false;
return true;
}
int main() {
int n;
cin >> n;
int cnt = 0;
for (int i = 3; i <= n; i+=2)
if (IsPrime(i)) prime[cnt++] = i;
int num = 0;
for (int i = 0; i < cnt-1; i++)
if (prime[i+1] - prime[i] == 2)
num++;
cout << num;
return 0;
}