LeetCode 204 計數質數

2021-10-24 01:53:20 字數 801 閱讀 7568

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

示例:輸入: 10

輸出: 4

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

暴力解法:寫乙個函式is_prime判斷某個數是否為質數,然後遍歷range(2,n)計算質數個數,結果超時。

埃拉託斯特尼篩法(sieve of eratosthenes )可以用來尋找小於n的所有質數,首先建立n維陣列,初始化均為質數(true)。

從2開始,2的倍數(不包含2)不為質數,因此標記改為false。下乙個數3也是如此,注意到3×2不必再標記了,因為在檢查2的時候已經標記過了,因此範圍可以進一步縮小從3×3開始檢查,並且每次加3。

對於需要檢查的數字i,要求iclass

solution

:def

countprimes

(self, n:

int)

->

int:

is_prime=

[true]*n

for i in

range(2

,int

(sqrt(n)+1

)):for j in

range

(i*i,n,i)

: is_prime[j]

=false

count=

0for i in

range(2

,n):

if is_prime[i]

: count+=

1return count

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