题目地址:PAT乙1007.素数对猜想(20)
题目描述:
让我们定义 d
n
为:d
n
= p
n+1
- p
n
,其中 p
i
是第i个素数。显然有 d
1
=1 且对于n>1有 d
n
是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
解题过程:
我这里采用了一个数组arr来存储所有的素数,这些素数都过遍历取余进行判断,在这里对遍历的过程中可以将上限改到sqrt(所要判断的数)即可,同时还能加快速度,避免不必要的操作。
程序:
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int N;
cin >> N;
int index = 0;
int arr[100000];
int count = 0;
for (int i = 2; i <= N; ++i)
{ /* 对范围内的数进行遍历 */
int flag = 0;
for (int j = 2; j <= sqrt(i); ++j)
{ /* 减少循环上限,提速 */
if (i % j == 0)
{ /* 如果出现可以整除现象 */
flag = 1;
break;
}
}
if (flag == 0)
arr[index++] = i;
}
for(int i = 0; i < index-1; i++)
{
if (arr[i+1] - arr[i] == 2)
count++;
}
cout << count << endl;
}