【PAT 乙级】1007 素数对猜想

1007 素数对猜想 (20)(20 分)

让我们定义 d~n~ 为:d~n~ = p~n+1~ - p~n~,其中 p~i~ 是第i个素数。显然有 d~1~=1 且对于n&gt1有 d~n~ 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。

现给定任意正整数N (< 10^5^),请计算不超过N的满足猜想的素数对的个数。

输入格式:每个测试输入包含1个测试用例,给出正整数N。

输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。

输入样例:

20

输出样例:

4

求素数需要注意的地方:

1.数字2的单独考虑;

2.简化时,可从3开始,每次+2,刨去所有偶数;

3.简化时,开平方可以不用sqrt,而用乘法的方法。

for (int i=3;i<=n;i=i+2)    //除去偶数部分
	{
		flag=0;
		for (int j=3;(j*j)<=i;j=j+2)   //平方的巧处理
		{
			if (i%j==0)
			{
				flag =1;
				break;
			}
		}
		if (flag==0)
		{
			s[k]=i;
			k++;
		}
	}

我的完整代码如下:

#include <iostream>
using namespace std;
int main()
{
	int n,flag=0,k=0,num=0;
	int s[100001];
	cin >> n;

	if (n>=2)   //单独考虑2
	{
		s[0]=2;
		k++;
	}

	for (int i=3;i<=n;i=i+2)    //除去偶数部分
	{
		flag=0;
		for (int j=3;(j*j)<=i;j=j+2)   //平方的巧处理
		{
			if (i%j==0)
			{
				flag =1;
				break;
			}
		}
		if (flag==0)
		{
			s[k]=i;
			k++;
		}
	}

	for (int i=0;i<k;i++)
	{
		if ((s[i]+2)==s[i+1])
		{
			num++;
		}
	}

	cout <<num;

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/crystalxuening/article/details/80869041