示例:
輸入: 10
輸出: 4
解釋: 小於 10 的質數一共有 4 個, 它們是 2, 3, 5, 7 。
厄拉多賽篩法,先找到不超過根號n的所有素數,再把這些素數的所有倍數去掉:
class Solution:
def countPrimes(self, n: int) -> int:
# 厄拉多賽篩法,先找到不超過根號n的所有素數,把這些素數的所有倍數去掉
if n <= 2:
return 0
res = [1] * n # 位置i爲1表示爲素數
res[:2] = [0]*2
for i in range(int(n**0.5)+1):
if res[i] == 1:
res[i*i:n:i] = [0]*len(res[i*i:n:i]) # 從i*i開始
return sum(res)