線性篩素數

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~算法

本人今天才知道,線性篩有兩種啊!spa

一種是歐拉篩,還有一種埃氏篩。效率

平時老師都說線性篩。也不知道爲啥?總結


今天咱們來說一講這兩種神奇的判斷素數的算法。時間

埃氏篩:

      作法:作法其實很簡單,首先將2到n範圍內的整數寫下來,其中2是最小的素數。將表中全部的2的倍數劃去,表中剩下的最小的數字就是3,他不能被更小的數整除,因此3是素數。再將表中全部的3的倍數劃去……以此類推,若是表中剩餘的最小的數是m,那麼m就是素數。而後將表中全部m的倍數劃去,像這樣反覆操做,就能依次枚舉n之內的素數,這樣的時間複雜度是O(nloglogn)。數字

      例題:枚舉

     給定兩個正整數a、b(a<b<=1012、b-a<=106),請問[a,b])內有多少個素數?

          代碼:略。 

 

歐拉篩:

    首先,咱們知道當一個數爲素數的時候,它的倍數確定不是素數。因此咱們能夠從2開始經過乘積篩掉全部的合數。
     將全部合數標記,保證不被重複篩除,時間複雜度爲O(n)。

      這個,我猜應該是老師們常常說的線性篩(統稱)吧!

      效率不錯。

      例題:

      同上(埃氏篩)。

 


 

總結:

    其實這些篩,都是線性篩素數。

相關文章
相關標籤/搜索