線性篩優化

2021-07-24 11:43:33 字數 627 閱讀 3004

如果我們要找出乙個範圍內的所有質數(素數)該如何處理

1.最簡單的就是乙個n*2的演算法

for(int i = 2; i <= n; i++)

for(int j = 2; j < i; j++)

2.因為當j*j之後是重複的所以優化

for(int i = 2; i <= n; i++)

for(int j = 2; j * j < i; j++)

3.因為我們知道2以後的質數都是奇數,所以i可以一次加2

prime[++cnt] = 2;

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

}

4.我們可以用到線性篩,複雜度接近n了

for (int i = 2; i <= n; i++)

}

5.我們發現線性篩會篩重,所以篩重時跳掉,複雜度大約是不優化的五分之一

for (int i = 2; i <= n; i++)

}

線性篩素數 尤拉篩 字首和優化

關於素數的定義 在大於1的自然數中,除了1和它本身以外不再有其他因數。判斷乙個數是否是素數 int x 要求的數 for int i 2 i sqrt x i 埃氏篩法 時間複雜度 o nloglogn int num prime 0 素數的數量 int prime 5005 放素數 int che...

線性篩 區間篩

求l到r之間的素數1 l 231 1 1 leq l 1 l231 1由於範圍過大只需要求得r 2 sqrt 2 2r 線性篩素數時間複雜度o n int n,m int prime 100000 vis 100005 void primes int n for int j 1 j m j 區間篩素...

線性篩(尤拉篩)

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