PTA自測 2 素數對猜想 20 分

2021-10-01 05:47:31 字數 962 閱讀 6964

今天寫了一下這道題,感覺還好,出了一點小問題,不過也很快解決了:

#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的滿足猜想的素數對的個數。輸入格式 輸入在一行給出正...