再講素數篩選法

2021-07-10 11:09:13 字數 685 閱讀 5311

今天乙個學弟給我看了他以前寫的乙個素數篩選法,本人拿來與eratosthenes篩選法對比測試了一下,其時間複雜度應該也是nlogn,實際執行速度在10^7的時候和eratosthenes篩選法差不多。另外與eratosthenes優化篩選法相比,它和eratosthenes篩選法都比

eratosthenes篩選法

優化篩選法要慢一點點,都不能篩選10^8內素數。這個篩選法的想法也比較獨特,因此拿出來大家研究學習以下。

**如下:

#include

int s[10000000];

int main()

}if(flag==0)

s[n++]=j;

}sum*=10;

}for(i=1;iprintf("\n共有%d個質數\n",n-1);

return 0;

}這個篩選法的思想和eratosthenes篩選法差不多,只不過側重不同,都是利用是否有素數約數判斷是否是素數。eratosthenes篩選法是利用倍數篩選,節省時間,而這個曬選法是利用10以內的素數,來判斷10到100中的數是否為素數,利用100以內的素數來判斷100到1000以內的數是否為素數,同時以乙個數小於乙個素數的平方以及合數有素數約數來判斷素數節省時間。這個篩選法中的素數陣列中第乙個數字是一,故輸出時從下標為一開始輸出。

學弟這麼厲害,當學長的也不能太那個啥了。。。努力,變得更強!!!

素數篩選法

篩選素數法 搞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...