素數篩選法

2022-04-03 11:46:56 字數 632 閱讀 3363

基本思想:素數的倍數一定不是素數

實現方法:用乙個長度為n+1的陣列儲存資訊(0表示素數,1表示非素數),先假設所有的數都是素數(初始化為0),

從第乙個素數2開始,把2的倍數都標記為非素數(置為1),一直到大於n;然後進行下一趟,找到2後面的下乙個素數3,

進行同樣的處理,直到最後,陣列中依然為0的數即為素數。

說明:整數1特殊處理即可。

#include #include 

#include

int a[100000001

];int

main()}}

printf(

"time: %.2lf

", (double) clock() /clocks_per_sec);

/*printf("2 ");

for (i = 3; i <= n; i++)

} */}

return0;

}

優化

#include#define max 100000000

int a[max + 1]=;

intmain()

for(i=3;i*i<=max;i++)}}

return0;

}

素數篩選法

篩選素數法 搞acm的都知道,素數是數論中必不可少的知識,也是必須要掌握的,關於素數的篩選有好幾種方法,下面一一道來,寫的不好還請提出。第一種是最常規的做法 int main if j sqrt i cout 這種方法肯定是比第一種快的,至於快多少大家可以比較一下,注意到裡面的for迴圈是到sqrt...

素數篩選法

素數篩選法差不多是打標,用前面確定的質數篩選掉後面的合數,然後遍歷下來所有的合數都被篩選掉了,剩下的都是素數。int vis maxn for int i 2 i n i for int j i 2 j n j i vis j 1 這是沒有優化的素數篩選法,也已經很快了,時間複雜度是n log n。...

素數篩選法

素數,是指因子只包含1和其本身的數,那麼,我們怎麼判斷素數呢?以下 均基於打表 1 1e6 的基礎上完成 素數的定義就是乙個數的因子只包含1和其本身,那麼我們直接就按照定義寫 include include define maxn 1000000 10 int pri maxn int isprim...