統計所有小於非負整數 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...