[PAT乙級]1007. 素數對猜想 (20)
阿新 • • 發佈:2019-02-10
1007. 素數對猜想 (20)
原題連結
讓我們定義 dn 為:dn = pn+1 - pn,其中 pi 是第i個素數。顯然有 d1=1 且對於n>1有 dn 是偶數。“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”。
現給定任意正整數N (< 105),請計算不超過N的滿足猜想的素數對的個數。
輸入格式:每個測試輸入包含1個測試用例,給出正整數N。
輸出格式:每個測試用例的輸出佔一行,不超過N的滿足猜想的素數對的個數。
輸入樣例:
20
輸出樣例:
4
注意:
- 第一次提交顯示執行超時,判斷素數時for迴圈裡寫的是j小於i,N很大時會顯示執行超時
- 程式碼是雙層for迴圈巢狀,時間複雜度(On^2)
- 改進後內部for迴圈條件為j*j<=i,當N很大時,減少很大一部分執行時間
程式碼:
#include <iostream>
using namespace std;
int main()
{
int N;
cin >> N;
int res = 0;
int a=2,b=3;
for(int i=5; i<=N; i++){
bool temp = true;
for(int j=2; j*j<=i; j++){//j*j很重要,減少執行時間
if(i%j == 0 ){
temp = false;
break;
}
}
if(temp){
a = b;
b = i;
if((b-a)==2)
res++;
}
}
cout << res << endl;
return 0;
}