尤拉篩法 素數(帶註解)

2021-09-27 21:00:37 字數 633 閱讀 3658

時間複雜度為o(n),比埃拉託色尼篩法快(埃氏篩法為 o(nloglogn)),原理是乙個合數只用它最小的質因數篩去。

圖表如下:

i素數表篩去2

34(不篩3*4=12,因為它有更小質因數2)56

………以此類推

#include

using namespace std;

bool isprime[

10000001];

int prime[

5000000];

intmain()

for(

int i=

2;i<=n;i++

)while(1

) isprime[i*prime[k]]=

0; if

(i%prime[k]==0

)break

; k++;}

k=0;

} cout<<

"prime numbers:"

int i=

0;i<=j-

1;i++

)return0;

}

希望對大家有幫助。

素數線性篩法(尤拉篩)

之前寫的埃式篩法複雜度達o n log n lo gn o n logn logn o n lo gn l ogn 在大數字的時候可能複雜度還不夠理想。這種做法對於乙個合數有可能會篩了多次,導致重複做功。引入尤拉篩法能夠解決這種多次篩同乙個數字的情況,理論演算法複雜度o n o n o n 精髓在於...

素數判定(素數篩法)(尤拉)

這裡主要說一下素數篩法,該方法可以快速的選取出1 n數字中的所有素數。時間複雜度遠小於o n sqrt n 方法為 從2開始,往後所有素數的倍數都不是素數。最後剩下的數都是素數。再說說尤拉公式,用來解決所有小於n中的數字有多少個與n互質,用 n 表示。n n 1 1 q1 1 1 q2 1 1 qk...

尤拉篩法求素數

尤拉篩法通過不篩除篩除過的數來將時間複雜度優化到 尤拉篩法求素數 首先,我們知道當乙個數為素數的時候,它的倍數肯定不是素數。所以我們可以從2開始通過乘積篩掉所有的合數。將所有合數標記,保證不被重複篩除,時間複雜度為o n 比較簡單 求小於等於n的素數的個數 include includeusing ...