統計所有小於非負整數 n 的質數的數量。
示例:
輸入:10輸出:4解釋:小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。1. 看到這道題的時候,第一反應是用遍歷。
class solution(object):
def countprimes(self, n):
""":type n: int
:rtype: int
"""def isprimes(n):
if n == 1:
return bool(0)
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return bool(0)
return bool(1)
count = 0
for i in range(1, n):
if isprimes(i):
count += 1
return count
2. 查了一下,發現乙個十分炫酷的方法:厄拉多塞篩法,具體講解可以參考這個部落格:
大致意思就是從2開始,將1~n中2的倍數都劃掉,只留最開始的乙個2;接下來是未做處理的3,將3的倍數都劃掉,只留下乙個3;類似的這樣下去。。。直到所有的數字都被處理過(留下或者劃掉),最終留下的數字是n以內的質數。
對於這道題,可以不需要知道具體的質數是誰,所以只需要用邏輯01計數即可.
def countprimes(self, n):
if n < 3:
return 0
primes = [1] * n # 廣播
primes[0] = primes[1] = 0
for i in range(2, int(n ** 0.5) + 1):
if primes[i]:
primes[i * i: n: i] = [0] * len(primes[i * i: n: i]) # i*i到n之間隔i取一次數
return sum(primes)
LeetCode 計數質數
計數質數 以下直接摘抄 西元前250年,希臘數學家厄拉多塞 eeatosthese 想到了乙個非常美妙的質數篩法,減少了逐一檢查每個數的的步驟,可以比較簡單的從一大堆數字之中,篩選出質數來,這方法被稱作厄拉多塞篩法 sieve of eeatosthese 具體操作 先將 2 n 的各個數放入表中,...
46 計數質數
統計所有小於非負整數 n 的質數的數量。示例 輸入 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 首先拿到這道題就是一頓秀,發現會超時,即使你會求平方根來進行算也會超時,因此考慮使用 埃拉託斯特尼篩法,簡稱埃氏篩或愛氏篩,是一種由希臘數學家埃拉託斯特尼所提出的一種簡...
204 計數質數
統計所有小於非負整數 n 的質數的數量。示例 輸入 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 這個題目思路很簡單,但是可能效率不高,裡面有一些小trick需要注意,所以在這裡記錄一下優化過程。思路1 逐個判斷每個數是否質數,超時 class solution d...