線性篩 區間篩

2021-09-25 12:26:38 字數 1008 閱讀 4326

求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的殘暴資料會跪,於是,線...