線性篩 mobius,強大O n

2022-05-13 18:18:22 字數 784 閱讀 6787

首先,你要知道什麼是莫比烏斯函式

然後,你要知道什麼是積性函式

最後,你最好知道什麼是線性篩

莫比烏斯反演

積性函式

知道了,就可以愉快的寫mobius函式了

由定義:

μ(n)=   1          (n=1)

(-1)^k   (n=p1p2...pk)  /*  注意質因子次數為1因為次數大於等於2則含有平方因子  */

0          (其他)

為什麼關係平方因子

呢?因為,由定義:

/*

莫比烏斯函式完整定義的通俗表達:

1)莫比烏斯函式μ(n)的定義域是n

2)μ(1)=1

3)當n存在平方因子時,μ(n)=0

4)當n是素數,μ(n)=-1

5)當n是奇數個不同素數之積時,μ(n)=-1

6)當n是偶數個不同素數之積時,μ(n)=1

*/

hint

由μ函式本身的積性

所以對於其他情況,只需要o(1)的從  mu[i] -> mu[i*p[j]] 就可以了

mu[i*p[j]]=-mu[i];
綜上所述:

const

int maxn=50000+10

;int

mu[maxn],p[maxn],flag[maxn],cnt;

void mobius(int

n) mu[i*p[j]]=-mu[i];}}}

mobius

線性篩 區間篩

求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 區間篩素...

線性篩(尤拉篩)

昨天的考試跪的一塌糊塗 第一題水過,第二題帶wa的樸素,最後題忘了特判左端點全跪,分數比起預計得分整整打了個對折啊!步入正題 線性篩 尤拉篩 一般的篩法 ppt裡叫埃拉託斯特尼篩法,名字異常高貴 的效率是o nlglgn 其實很接近o n 啊!對於一些例如n 10000000的殘暴資料會跪,於是,線...

尤拉篩 線性篩

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