尤拉篩 線性篩

2021-10-06 12:30:02 字數 572 閱讀 3344

實現:

#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%prime[j]==0時需要break:

下面用 s(smaller)表示小於 j 的數,l(larger) 表示大於 j 的數。

i × prime[s] 的最小質因數確實是 prime[s]。

i × prime[l]的最小質因數一定是 prime[j]而不是prime[l]。

這說明,如果 j繼續遞增(將用 prime[l]去篩 i × prime[l] ,而此時i × prime[l]的最小質因數並不是prime[l]而是prime[j])故該跳出;

線性篩(尤拉篩)

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

尤拉篩(線性篩)

尤拉篩多用於篩素數,時間複雜度是o n 主要原理 合數 最小質因子 合數 質數 這個合數的組成是唯一的,尤拉篩裡面只在這種情況篩一次,也就是每個數就篩一次,可以完成o n 的複雜度。每當列舉到乙個數,把這個數當作後面的那個數,在已經得到的質數里列舉當作最小質因子,看看這樣的組合能找到哪個合數,但是要...

線性篩法(尤拉篩)

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