C++實現PAT乙級1007: 素數對猜想

題目描述:

讓我們定義d​n​​爲:d​n​​=p​n+1​​−p​n​​,其中p​i​​是第i個素數。顯然有d​1​​=1,且對於n>1有d​n​​是偶數。“素數對猜想”認爲“存在無窮多對相鄰且差爲2的素數”。現給定任意正整數N(<10​^5​​),請計算不超過N的滿足猜想的素數對的個數。

  • 時間限制: 200 ms
  • 內存限制: 64 MB
  • 代碼長度限制: 16 KB

思路 :

找到2到N之間所有的素數,將其保存在數組中。然後計算arr[i+1]-arr[i],若其值爲2,則說明其滿足素數對猜想,素數對計數器+1。直到遍歷完所有的數組元素。

代碼:

#include<iostream>
#include<cmath>
using namespace std;
bool isPrime(int N)
{
	int i=2;
	while(i<=sqrt(N))//注意使用sqrt(而不是N/2) 
	{
		if(N%i==0)
		{
			return false;
		}
		i++;
	}
	return true;
}
int main()
{
	int N;
	cin>>N;
	int arr[N];
	int k=0;
	int count=0;
	for(int i=2;i<=N;i++)
	{
		if(isPrime(i))
		{
			arr[k++]=i;
		}
	}
	for(int i=0;i<k-1;i++)
	{
		if(arr[i+1]-arr[i]==2)
		{
			count++;
		}
	}
	cout<<count; 
	return 0;
}

注意點:題目中的N的範圍爲10的5次方,數據比較大,因此得注意判斷某個數是否爲素數得算法就得注意。在循環條件必須是sqrt(N),否則最後一個測試幾點會超時。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章