尤拉篩(線性o n 複雜度求出1 n的所有素數)

2021-09-13 11:40:00 字數 445 閱讀 7620

#include#include#includeusing namespace std;

const int maxn=1000005;

const int maxl=1299710;

bool check[maxl];

int prime[maxn];

int tot=0;

int main()

}printf("%d",prime[10]);

return 0;

}

從2開始列舉每個i,如果i不是合數,則把這個數放進素數prime裡,然後對素數陣列裡的每乙個數,用i*prime[j] 在不超過範圍

的情況下將這個數標記為合數,這樣下次列舉到這個數就可以直接判斷,同時如果乙個數是列舉的prime裡的數的倍數,那麼就

直接break, 這樣可以不重不漏的遍歷到每乙個數

線性篩(尤拉篩)

昨天的考試跪的一塌糊塗 第一題水過,第二題帶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 ...

尤拉篩(線性篩)

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