Eratosthenes篩法(素數篩)

2021-08-16 14:57:12 字數 574 閱讀 1433

最一般的素數篩思想很簡單,對於不超過maxx的每個非負整數p,刪除2p,3p,4p,……,然後剩下的就是素數,複雜度o(nlogn),因為對內層迴圈n/2+n/3+......+n/n  小於  1+1/2+1/3+...+1/n=ln(n+1)+γ,其中γ為尤拉常數≈0.577218

應當注意,1不是素數哦~

這樣已經不慢,但由於所有非素數都能由素數與素數的乘積表示,又可以優化如下

int maxx=1000000;

long long prime[maxx];

bool isprime[maxx];

void eratosthenes()

}}

時間複雜度是o(nloglogn)

但是還能再優化,內層迴圈不必從i*2開始,它已經在i=2時候就被篩掉了。優化如下:

int maxx=1000000;

long long prime[maxx];

bool isprime[maxx];

void eratosthenes()

}}

Eratosthenes篩法求素數

篩法的思想 對於不超過n的每個非負整數p,刪除2p,3p,4p,5p,當處理完所有數之後,還沒有被刪除的數就是素數 這是簡易版的篩法,也最好理解 for int i 2 i n i for int j i 2 j n j i vis j false 還可以繼續改進,為什麼呢?給定外層迴圈變數i,內層...

Eratosthenes篩法的F 實現

什麼是eratosthenes篩法 考慮乙個常見的數論問題,指定乙個整數,求出不大於該數的所有質數。我們可以先寫乙個函式來判斷某個整數是否為質數,然後用它逐一判斷每個整數,而eratosthenes篩法比這種方法高效得多。下面舉例來說明它的原理。觀察下面的彩圖 來自wikipedia 這裡是檢查12...

最大素因子 篩法

描述 greyants最近正在學習數論中的素數,但是現在他遇到了乙個難題 給定乙個整數n,要求我們求出n的最大素因子的序數,例如 2的序數是1,3的序數是2,5的序數是3,以此類推.研究數論是需要很大的耐心的,為了懲罰那些沒有耐心讀完題目的童鞋,我們規定 1的最大素因子序數是0.輸入有多組測試資料,...