204 計數質數

2021-10-25 05:58:52 字數 984 閱讀 6157

統計所有小於非負整數 n 的質數的數量。

示例:

輸入: 10

輸出: 4

解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。

// 直接的思路: 遍歷,判斷指數累計   s時間複雜度o(n的3/2次方) 空間複雜度o(1)

class

solution

return count;}}

//(構造素數表法)埃拉託色尼篩法 sieve of eratosthenes  時間複雜度o(n * loglogn)  空間複雜度o(n)

class

solution

}

第二種篩選法內部迴圈中的冗餘情況:

原版**:

for(int j = 2*i; j < n; j+=i)

array[j] = 1;

比如 n = 25,i = 4 時演算法會標記 4 × 2 = 8,4 × 3 = 12 等等數字,但是這兩個數字已經被 i = 2 和 i = 3 的 2 × 4 和 3 × 4 標記了。

從當前素數自身的平方開始篩選,這樣能夠有效的減少這種冗餘計算

for(int j = i*i; j < n; j+=i)

array[j] = 1;

-------------本文結束

賞 謝謝你請我吃糖果

支付寶

204 計數質數

統計所有小於非負整數 n 的質數的數量。示例 輸入 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 這個題目思路很簡單,但是可能效率不高,裡面有一些小trick需要注意,所以在這裡記錄一下優化過程。思路1 逐個判斷每個數是否質數,超時 class solution d...

204 計數質數

統計所有小於非負整數 n 的質數的數量。示例 輸入 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 判斷質數的常規解法 如判斷n是否為質數,只需要判斷n是否能整除2 int sqrt n 厄拉多塞篩法 比如說求20以內質數的個數,首先0,1不是質數.2是第乙個質數,然...

204 計數質數

統計所有小於非負整數 n 的質數的數量。示例 輸入 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 埃拉託色尼篩選法,迴圈中置對應值的倍數為0,最後統計為1的個數,也就是質數的個數。class solution def countprimes self,n int i...