leetcode 204 質數的個數

2021-08-07 21:56:23 字數 546 閱讀 3457

判斷n以內的所有的質數的個數,直接的想法是判斷每個數是不是質數。

然而n以內的數是由質數和合數組成的,合數可以由質數生成,質數的倍數就是乙個合數。

判斷乙個數是否為質數,就是判斷2~根下n的每個整數是否可以被n整除,若都不能被整除,則為質數,否則為合數。換個角度,即2~根下n的每個整數的倍數都是合數,通過計算出所有的合數,剩下的就是質數。更精確地說,是僅僅計算2~根下n的每個質數的倍數,而合數的倍數自然是合數。

這種方法是以空間換取時間,只是不是生成質數,而是通過生成合數,曲徑達到生成質數的目的。

另乙個典型的例子是醜數的個數,而醜數是可以直接生成的。

這兩個例子的特點是,有乙個判斷標準,然後給出大量的資料,找出這其中滿足這個標準的所有資料。質數例子中有乙個判斷是否為質數的標準,然後找出所有小於n的數中的質數的個數。醜數例子中有判斷是否為醜數的標準,然後找出第n個醜數。直接判斷每個資料是否滿足標準是直觀的解決辦法,但是效率低下,沒有充分利用判斷標準。而間接的方法是利用判斷標準直接生成所需範圍內的資料,需要有記錄表來儲存生成資料,是一種空間換取時間的思路。

leetcode 204 計數質數

統計所有小於非負整數 n 的質數的數量。示例 輸入 10輸出 4解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 厄拉多塞篩法 西元前250年,希臘數學家厄拉多塞 eeatosthese 想到了乙個非常美妙的質數篩法,減少了逐一檢查每個數的的步驟,可以比較簡單的從一大堆數字之中,篩選出...

leetcode204 計數質數

統計所有小於非負整數 n 的質數的數量。示例 輸入 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 厄拉多賽篩法,先找到不超過根號n的所有素數,再把這些素數的所有倍數去掉 class solution def countprimes self,n int int 厄拉...

LeetCode204 計數質數

統計所有小於非負整數 n 的質數的數量。示例 輸入 10輸出 4解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 解析 我一開始想的方法是對每個數字都判斷是否為質數,如果是質數,則增加1。最後發現超時了,應該是時間複雜度較高。後來參考了別人的方法,對每個數字,都對應乙個bool值,表示...