素?cái)?shù)篩

什么是素?cái)?shù)篩?

素?cái)?shù)篩是一種求所有小于n的所有素?cái)?shù)的方法,把從2開(kāi)始的所有合數(shù)逐步篩掉留下素?cái)?shù)。

埃氏篩

埃氏篩的思路非常簡(jiǎn)單,從2開(kāi)始篩去2的所有倍數(shù),接著從剩下的最小數(shù)字3開(kāi)始,篩去3的所有倍數(shù),依次下去,每一次都篩去上一次剩下的數(shù)中最小的數(shù)k的所有倍數(shù),最后剩下的數(shù)就是2~n中所有的素?cái)?shù)。

那為什么剩下的數(shù)中最小的就一定是素?cái)?shù)呢?因?yàn)橐粋€(gè)數(shù)的因子一定是不超過(guò)其本身的,而小于這個(gè)數(shù)的所有倍數(shù)均已經(jīng)被篩去了,所以剩下的數(shù)中最小的就一定是素?cái)?shù)。

埃氏篩實(shí)現(xiàn)

bool vis[MAXN]; //用于標(biāo)記下標(biāo)i是否是素?cái)?shù)
int prime[MAXN], x; //prime用于存放素?cái)?shù),x是prime數(shù)組的下標(biāo)指針
void PrimeFilter(int n){ //埃氏篩 時(shí)間復(fù)雜度:O(nloglogn)
    vis[0] = vis[1] = true;
    for(int i = 2; i <= n; i++){
        if(!vis[i])prime[x++] = i;
        for(int j = 2; j * i <= n; j++)vis[i*j] = true; //將這個(gè)素?cái)?shù)的所有倍數(shù)篩掉
    }
}

歐拉篩

在埃氏篩的步驟中我們可以發(fā)現(xiàn),一個(gè)合數(shù)可能被多次篩去,比如6,即是2的倍數(shù),也是3的倍數(shù),被篩去了兩次,這樣浪費(fèi)了很多時(shí)間。歐拉篩的基本思想就是讓每個(gè)合數(shù)只被它的最小質(zhì)因數(shù)篩去一次,避免重復(fù)。

歐拉篩實(shí)現(xiàn)

void EulaFilter(int n){ //歐拉篩
    vis[0] = vis[1] = true;
    for(int i = 2; i<=n; i++){
        if(!vis[i])prime[x++] = i;
        for(int j = 0; j < x; j++){
            if(i * prime[j] > n)break;
            vis[i * prime[j]] = true;
            if(i % prime[j] == 0)break;
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)題:給出一個(gè)數(shù)n,輸出1~n之間的素?cái)?shù) 素?cái)?shù)篩埃拉托斯特尼篩法每次消去的倍數(shù),直到?jīng)]有可消的為止,剩下的數(shù)字則為...
    雨落八千里閱讀 1,620評(píng)論 0 2
  • 素?cái)?shù)篩法,是一種快速“篩”出2~n之間所有素?cái)?shù)的方法。樸素的篩法叫埃氏篩(the Sieve ofEratosth...
    Pecco閱讀 503評(píng)論 0 0
  • 問(wèn)題提出 設(shè)計(jì)一個(gè)函數(shù)將指定范圍(比如[1,10000])中的所有素?cái)?shù)標(biāo)記出來(lái),利用arr[10001],如果i是...
    小超chao閱讀 383評(píng)論 0 0
  • 表情是什么,我認(rèn)為表情就是表現(xiàn)出來(lái)的情緒。表情可以傳達(dá)很多信息。高興了當(dāng)然就笑了,難過(guò)就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 129,677評(píng)論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險(xiǎn)厭惡者,不喜歡去冒險(xiǎn),但是人生放棄了冒險(xiǎn),也就放棄了無(wú)數(shù)的可能。 ...
    yichen大刀閱讀 7,872評(píng)論 0 4

友情鏈接更多精彩內(nèi)容