埃拉託色尼質數篩選法

2022-09-24 00:09:20 字數 741 閱讀 9227

以前夏季學期的時候接觸過埃氏篩選法,不過自己當時不太理解。今天看的時候有點感覺,大概用到的是每個合數都能寫成幾個質數相乘的格式,因此如果不能被比該數小的質數整除的話,該書一定也是質數。並且我們已知2是最小的質數,所以從2開始篩選。

以下程式可以輸出不超過n的所有質數。(當然鑑於陣列的大小是有限的,因此n也是有範圍的)

#includeint main()

for(int i = 2; i <= n; i++)}}

for(int i = 2; i <= n ; i++)

}

但我覺得這樣應該不是最快的,畢竟某些已經被篩去的合數還是參與了取餘操作。並且一些操作顯然沒有必要進行。例如在找小於100的質數時,雖然53是質數,但是顯然後面已經沒有以53為因數的數了,畢竟53×2=106>100。也就是說,在找100以內質數時,迴圈到第53個數時已經足夠了,沒有必要進行後面的操作了。

經過觀察我們很容易發現,當我們以m為因數消去後面的合數時,2m、3m 、……、(m-1)m已經在前面的操作中消去了,所以現在需要消去的是m^2、m(m+1) ……但是如果m^2已經大於n的話,後續的操作已經沒有意義了,所以實際上迴圈到√n(向下取整)就可以了。

#include#includeint main()

for(int i = 2; i <= sqrt(n); i++)}}

for(int i = 2; i <= n ; i++)

}

埃拉託色尼篩選法

埃拉託色尼篩選法 the sieve of eratosthenes 簡稱埃氏篩法,是古希臘數學家埃拉託色尼 eratosthenes 提出的一種篩選法。是針對自然數列中的自然數而實施的,用於求一定範圍內的質數。埃氏篩法步驟編輯 1 先把1刪除 現今數學界1既不是質數也不是合數 2 讀取佇列中當前最...

埃拉託色尼篩選法 演算法

埃拉託色尼篩選法 埃拉託色尼選篩法 the sieve of eratosthenes 簡稱埃氏篩法,是古希臘數學家埃拉託色尼 eratosthenes 274b.c.194b.c.提出的一種篩選法。是針對自然數列中的自然數而實施的,用於求一定範圍內的質數,它的容斥原理之完備性條件是p h 1 先把...

埃拉託色尼篩選法python實現

埃拉託色尼篩選法求一定範圍內自然數中的素數 1 首先取得大於2的所有自然數的數列。2 在數列中去掉所有大於2並且可以被2整除的數字,得到新數列。3 在新數列中去掉所有比第一位大但是可以被第一位數整除的數字,得到新數列。4 反覆執行步驟3即可得到所有的素數。生成乙個3開始的奇數數列 def odd i...