让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
本题思路为先将全部素数求出,再将相邻相差2的素数对的数目求出
本题关键点为求素数时,不必从2到n-1去搜寻,只需2到sqrt(n)即可,否则最后一测试点会超时
代码如下:
#include <iostream>
using namespace std;
#include <math.h>
#define N 100000
int main()
{
int i, j, k = 0;
int q = 0;
int n;
int number = 0;
int flag = 1;
int A[N], B[N];
cin >> n;
for (i = 3; i <= n; i++)
{
A[k++] = i;
}
for (i = 0; i<k; i++)
{
for (j = 2; j<=sqrt(A[i]); j++)
{
if (A[i] % j == 0) { flag = 0; break; }
}
if (flag == 1) B[q++] = A[i];
flag = 1;
}
for (i = 0; i<q-1; i++)
{
if (B[i + 1] - B[i] == 2)
{
number++;
}
}
cout << number;
return 0;
}