python 計數質數

2021-09-01 11:24:33 字數 1139 閱讀 2446

統計所有小於非負整數 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...