【PAT乙级真题】1007 素数对猜想(分数 20)(C++)
题目描述:
1007 素数对猜想(分数 20)
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
思路分析:
在做这道题时,菜菜子前期总是最后运行时间超时,后来发现主要是判断素数时的算法超时了
将判断的范围从最开始的折半改成取平方根后解决了这个问题
代码实现:
#include <iostream>
#include <cmath>
using namespace std;
/*判断是否是素数*/
bool isPrimeNum(int num) {
for (int i = 1; i <= sqrt(num); i++) //范围取到num的平方根
{
if (i != 1 && num % i == 0) return false;
}
return true;
}
int main() {
int n;
cin >> n;
int pre_num = 1, count = 0; //pre_num用来记录前一个素数,count用来记录素数对个数
for (int i = 2; i < n + 1; i++)
{
if (isPrimeNum(i)) {
if (i - pre_num == 2) count++;
pre_num = i;
}
}
cout << count << endl;
return 0;
}