1. 程式人生 > >[PAT乙級]1007. 素數對猜想 (20)

[PAT乙級]1007. 素數對猜想 (20)

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; }