python 判斷素數以及高效求n以內素數
阿新 • • 發佈:2019-01-07
1、判斷是否是素數
def isPrime(n):
if n <==1:
return False
i = 2
while i * i <= n:
if n % i == 0:
return False
i += 1
return True
2、求n以內的素數
class Solution:
def countPrimes(self, n):
"""
初始所有一個n維陣列 res 表示數都為素數。
從3開始將3的奇數倍標記成False,即不是素數。
之後對每一個素數此行上一步操作
這裡我們不用管偶數倍,因為我們最後判定時預設所有偶數不是素數
"""
if n < 3:return 0
res = [True] * n
for i in range(3, int(n**0.5)+1, 2):
res[i*i::2*i] = [False] * ((n-i*i-1)//(2*i)+1)
return [2] + [i for i in range(3,n,2) if res[i]]