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的題目。
    細節有機會再補。


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 aikosenoo 的頭像
    aikosenoo

    [FGISC。Nanro] 未來開端

    aikosenoo 發表在 痞客邦 留言(1) 人氣()