今天寫了一下這道題,感覺還好,出了一點小問題,不過也很快解決了:
#include
#include
using namespace std;
int isprime(int i);
int main()
int i = 0;
int n = 0;
int p2, p1;
p2 = p1 = 0;
int d = 0;
int cnt = 0;
cin >> n;
for (i = 3; i <= n; i++)
bool ip = isprime(i);
if (ip == false)
continue;
else
if (p1 == 0)
p1 = i;
continue;
else
p2 = i;
d = p2 - p1;
if (d == 2)
cnt++;
p1 = p2;
cout << cnt;
return 0;
int isprime(int i)
int sqrt_i = sqrt(i)+1;
for (int j = 2; j < sqrt_i; j++)
if (i % j == 0)
return 0;
return 1;
出的小問題主要是我自大地將3,5,7和偶數作為了判斷素數的條件,但是事實上素數的判斷遠遠不止這麼簡單,比如11*11=121這種數就不可以。然後在查詢了素數的判斷條件後,輕鬆就做出來了。
教訓:1.果然先將解題思路寫在紙上反覆檢查後再開始寫**,效率非常高,而且寫的也輕鬆。
2.還是要秉持分而治之的思想,將**分為多個部分,一部分一部分地檢查,比如我這裡就是素數的判定條件出錯了,然後檢查到這一部分後,問題一下子就找了出來。
自測 2 素數對猜想 20分
includeint n,m,p int d int flag 0 int count 0 int main for m n m 4 m 2 if flag 0 if flag 0 flag 0 printf d count 上述 在最後乙個測試點顯示執行超時。分割線 include int a 1...
自測 2 素數對猜想 20分
上述 最後乙個測試點不能通過於是開始優化 發現每次呼叫putindextoprim 函式都要從1開始重新判斷素數,故乾脆直接把素數存在乙個陣列裡面,就是一邊判斷是不是素數 是就存入今陣列 一邊判斷有幾對素數對 奧利給!include include int prim 100001 intmain i...
自測 2 素數對猜想 20分
自測 2 素數對猜想 20分 讓我們定義d n 為 d n p n 1 p n 其中p i 是第i個素數。顯然有d 1 1,且對於n 1有d n 是偶數。素數對猜想 認為 存在無窮多對相鄰且差為2的素數 現給定任意正整數n 10 5 請計算不超過n的滿足猜想的素數對的個數。輸入格式 輸入在一行給出正...