PAT 乙级 1007 (方法 + 代码)

1007 素数对猜想 (20 分)

让我们定义dn为:dn=p(n+1)​​− p​n​​,其中p​i​​是第i个素数。显然有d​1​​=1,且对于n>1有d​n​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N(<10^5​​),请计算不超过N的满足猜想的素数对的个数。

输入格式:

输入在一行给出正整数N。

输出格式:

在一行中输出不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

解题思路:(两种方法)

C++版

第一种:先判断出所有素数,再利用vector容器把所有的素数存储起来,然后找到符合条件的两个数的数目

#include
#include
#include
using namespace std;

bool deal(int n)
{
	for(int i = 2; i * i <= n; i++ )
	{
		if(n % i == 0)
			return false;
	}
	return true;
}

int main()
{
	int n;
	cin>>n;
	vector<int> a;
	for(int i = 2; i <= n; i++ )
	{
		if(deal(i))
			a.push_back(i);
			
	}
	int time = 0;
	for(int i = 1; i < a.size(); i++ )
	{
		if((a[i]-a[i-1]) == 2)
			time++;
	}
	cout<<time;
	system("pause");
	return 0;
}

第二种:利用for循环,在判断当前数和其之前与其差2的数是否为素数,如能找到便记一次数

#include
#include
#include
using namespace std;

bool deal(int n)
{
	for(int i = 2; i * i <= n; i++ )
	{
		if(n % i == 0)
			return false;
	}
	return true;
}

int main()
{
	int n,num=0;
	cin>>n;
	for(int i = 5; i <= n; i++ )
	{
		if((deal(i-2))&&(deal(i)))
			num++;
	}
	cout<<num;
	system("pause");
	return 0;
}

你可能感兴趣的:(PAT乙级)