close
*何謂篩法?
我們這裡所說的篩法,是Eratosthenes篩法(Sieve)。它是一種由古希臘數學家
Eratosthenes提出的,主要的功能是用來找出不大於n的所有質數。
*篩法的原理
篩法的主要原理就是,把不大於n的所有質數的倍數都砍掉,沒被砍到的就是質數。
*篩法的實作
一般而言,我們會開一個夠大的陣列(到n),紀錄相對索引值是否已經被砍掉。
之後,我們開始去窮舉每一個數,如果發現他是質數,便將其倍數通通砍掉,並記錄下
來,如果不是就跳過。這樣,便能得到不大於n的所有質數了。
順帶一提,我們通常會把2當成特例,然後從3開始砍。
*較有效率的篩法…
1. 假設現有一個質數p,那我們可以從p*p這個數開始砍起。
因為,若現有一個數q並非質數,則知道必有一個小於等於sqrt(q)的因數
若一數q小於p*p會被p砍到,則必有一個質因數小於p。換言之,也就是q/p<p且q/p
也為某個小於p的質數的倍數。
2. 跳過偶數
把2作為特殊處理之後,剩下的偶數便都是合數了。
在砍質數倍數時,記得每次加兩倍,跳過偶數倍。
3. 有要砍東西的質數最高到sqrt(n),故sqrt(n)以上的質數另外處理,不用砍,只需
記錄即可。
*試做題
ACM Q10791
是一題質數with greedy的題目。
細節有機會再補。
全站熱搜