1. 程式人生 > >PAT B1007 素數對猜想 (20 分)

PAT B1007 素數對猜想 (20 分)

algorithm scripts text bin sel 輸出 amp urn 整數

讓我們定義d?n??為:d?n??=p?n+1???p?n??,其中p?i??是第i個素數。顯然有d?1??=1,且對於n>1有d?n??是偶數。“素數對猜想”認為“存在無窮多對相鄰且差為2的素數”。

現給定任意正整數N(<),請計算不超過N的滿足猜想的素數對的個數。

輸入格式:

輸入在一行給出正整數N

輸出格式:

在一行中輸出不超過N的滿足猜想的素數對的個數。

輸入樣例:

20

輸出樣例:

4
#include <stdio.h>
#include <algorithm>
#include <string>
#include <map>
#include 
<iostream> #include <stack> #include <math.h> using namespace std; const int maxn = 100010; int index[maxn] = { 0 }; bool isPrime(int i){ for (int k = 2; k <= sqrt(i); k++){ if (i%k == 0)return false; } return true; } int main(){ int n, count = 0; cin >> n;
if (n == 1 || n == 2){ cout << 0; return 0; } for (int i = 2; i <= n; i++){ if (isPrime(i)){ index[i] = 1; } } for (int i = 2; i <= n-2; i++){ if(index[i]==1 && (index[i + 2] - index[i] == 0))count++; } cout
<< count; system("pause"); }

註意點:素數的判定一直是一個重點,本以為判斷到平方根也會超時,結果沒有還算好,有時間要去看一下時間復雜度最低的素數判定方法。這裏我是把所有素數都存起來,用了hash,也可以生成一個判斷一個,可以省點內存。

PAT B1007 素數對猜想 (20 分)