LeetCode 204 計數質數

2022-06-13 17:54:09 字數 1545 閱讀 1630

問題描述:

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

示例:

輸入:10輸出:4解釋:小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。
方法1:經典的判斷是否為質數遍歷(2,√n),超時

1

class

solution(object):

2def

countprimes(self, n):

3"""

4:type n: int

5:rtype: int

6"""

7 i = 2

8 count =0

9while i 10if

self.isprim(i):

11 count += 1

12 i += 1

13return

count

14def

isprim(self,num):

15 i = 2

16while i <= num**0.5:

17if num % i ==0:

18return

false

19 i += 1

20return true

方法2:厄拉多塞篩法

西元前250年,希臘數學家厄拉多塞(eeatosthese)想到了乙個非常美妙的質數篩法,減少了逐一檢查每個數的的步驟,可以比較簡單的從一大堆數字之中,篩選出質數來,這方法被稱作厄拉多塞篩法(sieve of eeatosthese)。

具體操作:先將 2~n 的各個數放入表中,然後在2的上面畫乙個圓圈,然後劃去2的其他倍數;第乙個既未畫圈又沒有被劃去的數是3,將它畫圈,再劃去3的其他倍數;現在既未畫圈又沒有被劃去的第乙個數是5,將它畫圈,並劃去5的其他倍數……依次類推,一直到所有小於或等於n的各數都畫了圈或划去為止。這時,表中畫了圈的以及未劃去的那些數正好就是小於 n 的素數。

1

class

solution(object):

2def

countprimes(self, n):

3"""

4:type n: int

5:rtype: int

6"""

7if n < 3:

8return

09 prime = [1]*n

10 prime[0] = prime[1] =0

11for i in range(2,int(n**0.5) +1):

12if prime[i] == 1:

13 prime[i*i:n:i] = [0]*len(prime[i*i:n:i])

14return sum(prime)

2018-09-17 20:12:38

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值,表示...