204 計數質數

2021-10-04 23:01:48 字數 828 閱讀 8794

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

示例:輸入: 10

輸出: 4

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

埃拉託色尼篩選法,迴圈中置對應值的倍數為0,最後統計為1的個數,也就是質數的個數。

class

solution

:def

countprimes

(self, n:

int)

->

int:

if n<=2:

return

0# 生成乙個n維列表

isprime =[1

]* n

# 0和1不是質數,所以前兩個位置為0

isprime[0]

= isprime[1]

=0# 此時從index=2開始遍歷,isprime[2]=0,表明第乙個質數為2,

#然後將2的倍數對應的索引全部賦0,以此類推,剩下的索引對應的書就是質數

# 這裡沒有用(2, n), 因為求n以內的質數,只要將sqrt(n)以內質數的倍數全部刪掉,

# 剩下的就全是質數

for i in

range(2

,int

(n**

0.5)+1

):if isprime[i]==1

: isprime[i*i:n:i]=[

0]*len

(isprime[i*i:n:i]

)return

sum(isprime)

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 計數質數

題目 尋找 2,n 的質數是很常見的問題,主要有三種方法,現總結如下 列舉法思路簡單,但是要注意這幾點 1 0和1應該要特判,除非在判斷質數時壓根就不讓0,1參與選擇,直接從2開始 2 為了判斷n是否是質數,只需要列舉i 2至i 根號n,但是在程式中應該表現為i i n,素數條件如果從i i x改為...