133 204 計數質數

2022-05-02 18:06:15 字數 2594 閱讀 6149

統計所有小於非負整數 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 首先拿到這道題就是一頓秀,發現會超時,即使你會求平方根來進行算也會超時,因此考慮使用 埃拉託斯特尼篩法,簡稱埃氏篩或愛氏篩,是一種由希臘數學家埃拉託斯特尼所提出的一種簡...