題目描述:
讓我們定義dn爲:dn=pn+1−pn,其中pi是第i個素數。顯然有d1=1,且對於n>1有dn是偶數。“素數對猜想”認爲“存在無窮多對相鄰且差爲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),否則最後一個測試幾點會超時。