實現:
#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...