尤拉篩(線性篩)

2021-10-09 01:54:03 字數 404 閱讀 4704

尤拉篩多用於篩素數,時間複雜度是o(n);

主要原理:合數=最小質因子*合數(質數)

這個合數的組成是唯一的,尤拉篩裡面只在這種情況篩一次,也就是每個數就篩一次,可以完成o(n)的複雜度。

每當列舉到乙個數,把這個數當作後面的那個數,在已經得到的質數里列舉當作最小質因子,看看這樣的組合能找到哪個合數,但是要注意,前面的質數一定要是最小質因子,如果if(i%prim[j]==0)則,前面的質數不是最小質因子,因為i可以拆成更小的質因子,導致prim[j]不是將要得到的合數的最小質因子,這樣會造成這個將要得到的合數被篩兩遍,徒增複雜度;

//尤拉篩//

for(i=

2;i<=n;i++

)for

(j=0

;j)}

線性篩(尤拉篩)

昨天的考試跪的一塌糊塗 第一題水過,第二題帶wa的樸素,最後題忘了特判左端點全跪,分數比起預計得分整整打了個對折啊!步入正題 線性篩 尤拉篩 一般的篩法 ppt裡叫埃拉託斯特尼篩法,名字異常高貴 的效率是o nlglgn 其實很接近o n 啊!對於一些例如n 10000000的殘暴資料會跪,於是,線...

尤拉篩 線性篩

實現 include using namespace std const int max n 1e8 int prime max n cnt bool st max n 使用bool陣列節省空間 void is prime int n intmain 每個合數只被自己最小的質因子篩去。現在證明在i ...

線性篩法(尤拉篩)

從前有乙個素數篩法叫埃拉託斯特尼篩法,它的思想很簡單,把1 n以內素數的整數倍的數字劃掉,留下的就全是素數,但是它的複雜度是o nlglgn 對於大量不友好資料會跪,於是線性曬登場了。include using namespace std int prime 1100000 primesize,ph...