問題描述:
統計所有小於非負整數 n 的質數的數量。
示例:
輸入:10輸出:4解釋:小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。方法1:經典的判斷是否為質數遍歷(2,√n),超時
1class
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 的素數。
1class
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值,表示...