C語言實現埃拉託斯特尼篩法

2021-10-24 21:40:29 字數 1363 閱讀 4868

埃拉託斯特尼篩法,簡稱埃氏篩,也稱素數篩。這是一種簡單且歷史悠久的篩法,用來找出一定範圍內所有的素數。

​ 所使用的原理是從2開始,將每個素數的各個倍數,標記成合數。乙個素數的各個倍數,是乙個差為此素數本身的等差數列。此為這個篩法和試除法不同的關鍵之處,後者是以素數來測試每個待測數能否被整除。

給出要篩數值的範圍n,找出√n以內的素數。先用2去篩,即把2留下,把2的倍數剔除掉;再用下乙個素數,也就是3篩,把3留下,把3的倍數剔除掉;接下去用下乙個素數5篩,把5留下,把5的倍數剔除掉;不斷重複下去。

以25為例:

列出2以後的所有序列:

標出序列中的第乙個質數,也就是2,序列變成:

將剩下序列中,劃去2的倍數,序列變成:

如果現在這個序列中最大數小於等於最後乙個標出的素數的平方,那麼剩下的序列中所有的數都是質數,否則回到第二步。

​ 先輸入要刪選的範圍數num,建立長度為num+1的陣列prime,使得prime[i]=i(方便計算)。

​ 再從小到**列出素數 i :將素數的倍數標記為0:prime[i * j] = 0;,判斷此時素數的平方是否小於這個陣列中的最大數if (getmax(prime, num) <= i * i),若是則繼續挑選下乙個素數,重複以上步驟;若否,則篩選完成,列出素數。

#include

#include

#include

intgetmax

(int prime,

int index)

intmain()

while

(num <=1)

;int prime[num +1]

;for

(int i =

0; i <= num; i++

) prime[i]

= i;

for(

int i =2;

; i++)if

(prime[i]!=0

)else prime[i]=0

;printf

("prime numbers no more than %d are:\n"

, num)

;for

(int flag =

0, i =

2; i <= num; i++)if

(prime[i]

)return0;

}

埃拉託斯特尼篩法

質數又稱素數。指在乙個大於1的自然數中,除了1和此整數自身外,沒法被其他自然數整除的數。怎麼判斷n以內的哪些數是質數呢?厄拉多塞是一位古希臘數學家,他在尋找素數時,採用了一種與眾不同的方法 先將2 n的各數放入表中,然後在2的上面畫乙個圓圈,然後劃去2的其他倍數 第乙個既未畫圈又沒有被劃去的數是3,...

埃拉託斯特尼篩法

埃拉託斯特尼篩法,簡稱埃氏篩或愛氏篩,是一種由希臘數學家埃拉託斯特尼所提出的一種簡單檢定素數的演算法。要得到自然數n以內的全部素數,必須把小於等於根號n的所有素數的倍數剔除,剩下的就是素數。這是什麼意思呢?以100為例,我們先建立乙個擁有101 0 100 個數字的陣列。先使用最小的素數2,將所有2...

埃拉託斯特尼 Eratosthene 篩法

下面是 功能 將1 n的素數輸出 使用了埃拉託斯特尼 eratosthene 篩法 include include using namespace std int prime 10000000 存放需要篩選數 int sieve int prime,int n,int k n是1 n這個範圍,k是當...