統計所有小於非負整數 n 的質數的數量。
埃拉託色尼篩選法:
先將(2,n)的各數放入表中,然後在 2 的上面畫乙個圓圈,然後劃去 2 的其他倍數;第乙個既未畫圈又沒有被劃去的數是 3,將它畫圈,再劃去 3 的其他倍數;現在既未畫圈又沒有被劃去的第乙個數是 5,將它畫圈,並劃去5的其他倍數……依次類推,一直到所有小於或等於n的各數都畫了圈或划去為止。這時,表中畫了圈的以及未劃去的那些數正好就是小於 n 的素數。
轉換為**就是如果需要 1
p = np.ones(n, dtype=np.int8)
i, j = 1, 3 #i表示位置,j表示位置實際代表的數,j=i*2+1
while i < n**0.5:
if p[i]:
p[j**2 >> 1::j] = 0
i, j = i + 1, j + 2
return p.sum()
result = eratosthenes(25)
print(result)
#不借助numpy,使用列表的方法
def countprimes(n):
if n < 3:
return 0
else:
# 首先生成了乙個全部為1的列表
output = [1] * n
# 因為0和1不是質數,所以列表的前兩個位置賦值為0
output[0],output[1] = 0,0
# 此時從index = 2開始遍歷,output[2]==1,即表明第乙個質數為2,然後將2的倍數對應的索引
# 全部賦值為0. 此時output[3] == 1,即表明下乙個質數為3,同樣劃去3的倍數.以此類推.
for i in range(2,int(n**0.5)+1):
if output[i] == 1:
output[i*i:n:i] = [0] * len(output[i*i:n:i])
# 最後output中的數字1表明該位置上的索引數為質數,然後求和即可.
return sum(output)
result = countprimes(25)
print(result)
埃拉託色尼質數篩選法
以前夏季學期的時候接觸過埃氏篩選法,不過自己當時不太理解。今天看的時候有點感覺,大概用到的是每個合數都能寫成幾個質數相乘的格式,因此如果不能被比該數小的質數整除的話,該書一定也是質數。並且我們已知2是最小的質數,所以從2開始篩選。以下程式可以輸出不超過n的所有質數。當然鑑於陣列的大小是有限的,因此n...
埃拉託色尼篩選法
埃拉託色尼篩選法 the sieve of eratosthenes 簡稱埃氏篩法,是古希臘數學家埃拉託色尼 eratosthenes 提出的一種篩選法。是針對自然數列中的自然數而實施的,用於求一定範圍內的質數。埃氏篩法步驟編輯 1 先把1刪除 現今數學界1既不是質數也不是合數 2 讀取佇列中當前最...
埃拉託色尼篩選法 演算法
埃拉託色尼篩選法 埃拉託色尼選篩法 the sieve of eratosthenes 簡稱埃氏篩法,是古希臘數學家埃拉託色尼 eratosthenes 274b.c.194b.c.提出的一種篩選法。是針對自然數列中的自然數而實施的,用於求一定範圍內的質數,它的容斥原理之完備性條件是p h 1 先把...