zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【PAT乙级真题】1007 素数对猜想(分数 20)(C++)

C++ 20 真题 PAT 素数 分数 乙级 猜想
2023-09-27 14:28:31 时间

【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;
}