題目
[1007]. 素數對猜想 (20)
時間限制 400 ms內存限制 65536 kB代碼長度限制 8000 B判題程序 Standard 作者 CHEN, Yue
讓我們定義 dn 爲:dn = pn+1 - pn,其中 pi 是第i個素數。顯然有 d1=1 且對於n>1有 dn 是偶數。“素數對猜想”認爲“存在無窮多對相鄰且差爲2的素數”。
現給定任意正整數N (< 105),請計算不超過N的滿足猜想的素數對的個數。
輸入格式:每個測試輸入包含1個測試用例,給出正整數N。
輸出格式:每個測試用例的輸出佔一行,不超過N的滿足猜想的素數對的個數。
輸入樣例:
20
輸出樣例:
4
思路!!!:
爲了節約時間循環的起點可以從3開始(作爲素數2不滿足條件),而且一切大於2的偶數都不可能爲素數,所以沒必要進行素數的判斷所以控制循環的i以i+=2的方式遞增。剛開始做的時候因爲素數判斷的方式不夠優化導致內存超時,所以老大推薦了另外一種以i*i<=n的方式遞增的循環方式
c++代碼如下:
#include"iostream"
using namespace std;
bool check(int n) //素數判定函數
{
int i;
for(i=2;i*i<=n;i++) //i*i<=n減少時間
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int n;
int ant=0;
int i=3;
cin>>n;
for(;i+2<=n;i+=2)
{
if(check(i))
{
if(check(i+2))
{
ant++;
}
else
i+=2;
}
}
cout<<ant;
return 0;
}