1. 程式人生 > >PAT 乙級 1007 素數對猜想

PAT 乙級 1007 素數對猜想

1007 素數對猜想 (20 point(s))

讓我們定義d​n​​為:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i個素數。顯然有d​1​​=1,且對於n>1有d​n​​是偶數。“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”。

現給定任意正整數N(<10​5​​),請計算不超過N的滿足猜想的素數對的個數。

輸入格式:

輸入在一行給出正整數N

輸出格式:

在一行中輸出不超過N的滿足猜想的素數對的個數。

輸入樣例:

20

輸出樣例:

4

經驗總結: 

emmmm   先用挨氏篩法求出所有的素數並依次放在一個數組裡,然後就。。。根據給定數字求比他小的滿足條件的素數對的對數就行了~~

AC程式碼

#include <cstdio>
#include <cmath>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

const int maxn=100010;
int prime[maxn],pnum=0;
bool flag[maxn]={0};
void find_prime()
{
	for(int i=2;i<maxn;++i)
	{
		if(flag[i]==false)
		{
			prime[pnum++]=i;
			for(int j=i+i;j<maxn;j+=i)
			{
				flag[j]=true;
			}
		}
	}
}

int main()
{
	int n;
	find_prime();
	while(~scanf("%d",&n))
	{
		int count=0;
		for(int i=1;prime[i]<=n;++i)
		{
			if(prime[i]-prime[i-1]==2)
				++count;
		}
		printf("%d\n",count);
	}
	return 0;
}