1007 素数对猜想 (20分)
让我们定义
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
=
1
d_1=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
解题思路
- 用埃氏筛法求范围内的素数并将其插入到 v e c t o r vector vector 数组里
- 判断数组中相邻两个素数的差 如果绝对值等于 2 则使 cnt+1
AC代码
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
vector<int> primer;
bool isprimer[100005];
void GetPrimer(int n)
{
for (int i = 2; i <= n; ++i)
if (isprimer[i])
{
for (int j = i + i; j < n; j += i)
isprimer[j] = false;
primer.push_back(i);
}
}
int main()
{
int n;
cin >> n;
memset(isprimer, true, sizeof(isprimer));
GetPrimer(n);
int cnt = 0;
for (int i = 1; i < primer.size(); ++i)
if (primer[i] - primer[i - 1] == 2)
cnt++;
cout << cnt << endl;
return 0;
}