求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++)}
}區間篩素數和埃篩類似方法,用r
2\sqrt[2]
2r帶入線性曬素數中取得因子按倍數擴充套件至[l,r]範圍中
注意要使用到向上取整和向下取整的用法,先要經強制轉換為浮點型後才可使用
int prime[
100000];
map<
int,
bool
> vis;
vector<
long
long
> a;
for(
int i=
1;i<=m;i++
)for
(long
long j=
ceil((
double
)l/prime[i]
);j<=
floor((
double
)u/prime[i]
);j++)if
(j!=1)
vis[prime[i]
*j]=
true
;for
(long
long i=l;i<=u;i++)if
(!vis[i]
) a.
push_back
(i);
素數篩 埃氏篩 線性篩 區間篩)
顧名思義,素數篩就是用來篩素數的。1.埃氏篩 o nloglogn 對於一般 不毒瘤 的素數題,埃氏篩就夠了 原理 任何合數都有小於自身的質因數 內容 對於每乙個素數將它的 2 i x i i全部標記為1,使得所有的合數全被標記 不足 合數會被標記素因數次,不夠高效 void prime int x...
素數篩法(素數篩 線性篩)
求素數的方法在現階段可以總結為三種 這種方法最為簡單但效率太低,經過優化時間複雜度最低是o n sqrt n 輸入乙個n,輸出n以內所有素數 include intprime int n if flag 0 優化 printf d i intmain 素數篩法原理 2是素數,那麼2的所有倍數都是合數...
線性篩(尤拉篩)
昨天的考試跪的一塌糊塗 第一題水過,第二題帶wa的樸素,最後題忘了特判左端點全跪,分數比起預計得分整整打了個對折啊!步入正題 線性篩 尤拉篩 一般的篩法 ppt裡叫埃拉託斯特尼篩法,名字異常高貴 的效率是o nlglgn 其實很接近o n 啊!對於一些例如n 10000000的殘暴資料會跪,於是,線...