統計所有小於非負整數 n 的質數的數量。 (前三個我寫的[其實就以前看過]超時了,後面自己想吧)
class solution(object):
def countprimes1(self, n):
""":type n: int
:rtype: int
"""if n <= 2:
return 0
primes_list = [2]
# 根據一條定理,可以被指數整除的數一定不是指數,反推出如果不被被質數整除則是質數
for i in range(3, n, 2): # 這裡從三開始,同時步長為2表示跳過偶數
if i > 10 and (i % 4 != 3 and i % 4 != 1):
continue
flag = false
for item in primes_list:
if i % item == 0:
flag = true
break
# 其中有乙個規律,乙個質數就可以找到整除他的數的範圍是小於自己的開方範圍數,超過這個數則表示沒有
if item + 1 > i ** 0.5:
break
if not flag:
return len(primes_list)
def countprimes2(self, n):
""":type n: int
:rtype: int
"""if n <= 2:
return 0
primes_list = [2]
# 根據一條定理,可以被指數整除的數一定不是指數,反推出如果不被被質數整除則是質數
for i in range(3, n, 2): # 這裡從三開始,同時步長為2表示跳過偶數
if i > 10 and (i % 4 != 3 and i % 4 != 1):
continue
flag = false
for item in primes_list:
if i % item == 0:
flag = true
break
# 其中有乙個規律,乙個質數就可以找到整除他的數的範圍是小於自己的開方範圍數,超過這個數則表示沒有
if item + 1 > i ** 0.5:
break
if not flag:
return len(primes_list)
def countprimes3(self, n):
""":type n: int
:rtype: int
"""if n <= 2:
return 0
count = 1
for i in range(3, n, 2):
if i > 10 and (i % 4 != 3 and i % 4 != 1):
continue
flag = false
for j in range(3, int(i ** 0.5) + 1, 2):
if i % j == 0:
flag = true
break
if not flag:
count += 1
return count
def countprimes4(self, n):
"""埃氏篩: 請看力扣官網
:type n: int
:rtype: int
"""if n <= 2:
return 0
is_prime = [1] * n
ans = 1
for i in range(3, n, 2):
if is_prime[i] == 1:
ans += 1
if i * i < n:
j = i * i
while j < n:
is_prime[j] = 0
j += i
return ans
def countprimes(self, n):
"""線性篩: 請看力扣官網
:type n: int
:rtype: int
"""prime_list = [2]
is_prime = [1] * n
for i in range(3, n, 2):
if is_prime[i] == 1:
for k in range(len(prime_list)):
if i * prime_list[k] < n:
is_prime[i*prime_list[k]] = 0
if i % prime_list[k] == 0:
break
else:
break
return len(prime_list)
if __name__ == '__main__':
s1 = solution()
start = time.time()
print(s1.countprimes(1500000))
print(time.time() - start)
LeetCode 計數質數
計數質數 以下直接摘抄 西元前250年,希臘數學家厄拉多塞 eeatosthese 想到了乙個非常美妙的質數篩法,減少了逐一檢查每個數的的步驟,可以比較簡單的從一大堆數字之中,篩選出質數來,這方法被稱作厄拉多塞篩法 sieve of eeatosthese 具體操作 先將 2 n 的各個數放入表中,...
python 計數質數
統計所有小於非負整數 n 的質數的數量。示例 輸入 10輸出 4解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 1.看到這道題的時候,第一反應是用遍歷。class solution object def countprimes self,n type n int rtype int ...
46 計數質數
統計所有小於非負整數 n 的質數的數量。示例 輸入 10 輸出 4 解釋 小於 10 的質數一共有 4 個,它們是 2,3,5,7 首先拿到這道題就是一頓秀,發現會超時,即使你會求平方根來進行算也會超時,因此考慮使用 埃拉託斯特尼篩法,簡稱埃氏篩或愛氏篩,是一種由希臘數學家埃拉託斯特尼所提出的一種簡...