素數的快速篩選(埃氏篩法)

2022-09-06 07:30:10 字數 930 閱讀 7042

要列舉n以內的素數,可以用埃氏篩法。這是乙個與輾轉相除法一樣古老的演算法。

首先,將2到n範圍內的所有整數寫下來。其中最小的數字2是素數。將表中所有2的倍數都劃去。表中剩餘的最小數字是3,它不能被更小的數整除,所以是素數。再將表中所有3的倍數全都劃去。依次類推,如果表中剩餘的最小數字是m時,m就是素數。然後將表中所有m的倍數全部劃去。像這樣反覆操作,就能依次列舉n以內的素數。

第i個素數

bool is_prime[maxn];//

is_prime[i]為true表示i是素數

int sieve(int n)//

返回n以內的素數

return

cnt;

}埃氏篩的複雜度僅有o(nloglogn),算是比較快的了。當資料量不是太大的時候,可以把它的複雜度看作是線性的。

最近在學python,附上python 3.6的**:

def

eratosthenes(n):

p = [i for i in range(2, n+1)]

p =0

while

true:

for i in p[p + 1:]:

if i % p[p] ==0:

p.remove(i)

if p[p]**2 >= p[-1]:

break

p += 1

returnpif

__name__ == "

__main__":

print (eratosthenes(120))

埃氏篩法 素數的快速篩選

埃氏篩法的的核心是 素數的倍數都不是素數。那我們執行這樣乙個策略,我們可以確定的是 2 是最小的素數,建立乙個表並將除了 0 1 外的所有數標記為素數,我們將篩選範圍內的 2 的倍數全部標記為合數 非素數 然後取出表中最小的素數,執行相同的策略 講素數的倍數標記為非素數 下圖可以完美的演示這樣乙個演...

埃氏篩法 素數篩

埃式篩法 給定乙個正整數n n 10 6 問n以內有多少個素數?做法 做法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中所有的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,所以3是素數。再將表中所有的3的倍數劃去 以此類推,如果表中剩餘的最小的數是m,那麼m...

素數 埃氏篩法

題目 求2 100以內的素數。素數 prime number 又稱質數,是指乙個大於1的自然數,除了1和它本身外,不能被整除以其他自然數。解法一 根據素數的定義,即用該數除比其小的數 1除外 都不能除盡,即為素數 public class prime if i n system.out.print ...