wenbao與篩法素數及判斷模板

2022-04-17 04:36:01 字數 1413 閱讀 7767

1

#define ll long long

2const

int maxn = 1000000;3

intvis[maxn],prime[maxn];

4void

isprime()516

}17 }

判斷模板

1

bool prime(intx)2

15return

flag;

16 }

1 #include2 #include3 #include4

using

namespace

std;

5#define n 10000000567

bool

vis[n];

8int

p[n], cnt, phi[n];910

int euler(int

n)18

for (j = 0; j < cnt && i * p[j] < n; ++j)25}

26}27return

cnt;28}

2930

int eratosthenes (int

n)40}41

return

cnt;42}

4344

intmain()

64return0;

65 }

我們先來看一下最經典的埃拉特斯特尼篩法。時間複雜度為o(n loglog n)

1

intans[maxn];

2void prime(intn)3

15}16return

;17 }

顯然,當乙個數是素數的時候,那麼他的倍數肯定是合數,篩選標記即可。從i*i而不從i*2開始,是因為已經i*3,i*2早已經被2,3篩過了。

由此,我們也可以發現有的合數被重複篩除,例如30,2*15篩了一次,5*6重複篩除,所以也就有了我們下面要提到的尤拉線性篩法。

不會重複篩除,是線性o(n)的複雜度。

1

const

int maxn=3000001;2

int prime[maxn];//

儲存素數

3bool vis[maxn];//

初始化

4void prime(intn)5

18}19return cnt;//

返回小於n的素數的個數

20 }

1

void

prime()

7for(int j = 0; j < num && i*b[j] < maxn; j++)11}

12 }

只有不斷學習才能進步!

素數判斷及篩法

單個素數判斷 素數判斷 小資料 int prime int n miller rabin 大素數判定 單個數字n複雜度15 log n int mr 30 此陣列為測試用的a,這12個可測所有的long long int lli miller rabin lli n if x 1 return fa...

素數判斷及篩法

素數 prime number 又稱質數,有無限個。素數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數。問法1 給定乙個數n,判斷n是不是素數 一 暴力列舉 列舉2 n 1分別當做除數,判斷是否能整除,如果某個數能把n整除,那麼就說明n不是素數,如果所有都不能整除,那麼n就是素數。注 n...

數論 多種素數判斷法及素數篩法

水了一篇啊.眾所周知,大於等於 2 的僅含有 1 和自身這兩個因子的正整數被稱作素數 故只要判斷在 2,n 1 範圍內是否存在其它因子,就可以判斷 n 是否為素數了 無腦判斷法直接從 2 for到 n 1 稍微優化下可以縮減到 2,frac n 2 但這個方法時間複雜度為 o n 可以發現,如果某個...