lc204計算質數

2021-10-18 15:33:28 字數 922 閱讀 4476

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

示例 1:

輸入:n = 10

輸出:4

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

示例 2:

輸入:n = 0

輸出:0

示例 3:

輸入:n = 1

輸出:0

0 <= n <= 5 * 106

這裡用的是埃式篩法

本題需要注意 資料範圍 510^6,在ii的時候,會溢位,因為要強轉為long

思路:開創乙個boolean陣列,下標為0-n,用於儲存是否是素數,如果不是素數那麼就跳過,是素數的話 這個素數的倍數一定不是素數,例如 2i,3i…肯定不是素數,將其標誌位true,在下次判斷時直接跳過即可。

還可以進一步優化,那就是不從這個素數的2倍開始標誌,直接從ii倍開始標誌,因為ii之前的數 肯定已經被比當前這個素數更小的素數標記過,例如,2*i,一定被2的i倍標記過,因為我們不需要在通過i的二倍來標記這個數。

class

solution

//如果這個數是素數,那麼從i的倍數開始到n,就肯定不是素數,因為是i的倍數

//這裡可以不從2*i開始,因為如果2*i不是素數,那麼這個2*i一定已經被某個小於i的倍數標記過

//因為我們從x*x 到 n開始標記 查詢不是素數的值即可

ans++

;//這裡n的 範圍是5*10^6,用int會越界,因為用long儲存

//注意這裡一定要在i*i之前加上強轉,不加上強轉就算j是long也沒用,因為傳過去的時候已經溢位的情況了

for(

long j =

(long

)i*i;j < n;j = j + i)

}return ans;

}}

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...