莫比乌斯

一:莫比乌斯函数

定义:μ 为莫比乌斯函数,定义为

\[\mu \left ( n\right )=\left\{\begin{matrix}
1 & n=1 \\
0& n含有平方因子\\
\left ( -1\right ) ^{k} & n=p_{1}p_{2}p_{3}\cdots p_{k}
\end{matrix}\right.\]

性质1

\[\sum_{d|n}\mu \left ( d\right )=\left\{\begin{matrix}
1 & n=1\\
0 & n\neq 1
\end{matrix}\right.\]

即\(\sum_{d|n}\mu \left ( d\right )=\varepsilon \left ( n\right )\),即\(\mu *1 = \varepsilon\)

 性质2:

\[\sum_{d|n}\frac{\mu \left ( d\right )}{d} = \frac{\phi \left ( n\right )}{n}\]

 反演结论:

\[\left [ gcd\left ( i,j\right )=1\right ]\Leftrightarrow \sum_{d|gcd\left ( i,j\right )}\mu \left ( d\right )\]

 

根据定义:线性筛莫比乌斯函数

 

 1 bool prime[maxn];
 2 int Prime[maxn],mu[maxn],tot;
 3 void get_mu(){
 4     memset(prime,true,sizeof(prime));
 5     prime[0]=prime[1]=false;
 6     tot=0;
 7     
 8     mu[1]=1;
 9     for(int i=2;i<=n;i++){
10         if( prime[i] ) Prime[++tot]=i,mu[i]=-1;
11         for(int j=1;j<=tot&&i*Prime[j]<=n;j++){
12             prime[i*Prime[j]]=false;
13             if( i%Prime[j]==0 ){
14                 mu[i*Prime[j]]=0;
15                 break;
16             }
17             mu[i*Prime[j]]=-mu[i];
18         }
19     }
20 }

 

 

 二:莫比乌斯反演

约数公式:

设 \(f\left ( n\right ),g\left ( n\right )\) 为两个数论函数

如果有\[f\left ( n\right )=\sum_{d|n}g\left ( d\right )\]

那么有\[g\left ( n\right )=\sum_{d|n}\mu \left ( d\right )f\left ( \frac{n}{d}\right )\]

证明:已知\(f=g*1\),则\(f*\mu =g*1*\mu \Rightarrow f*\mu =g\left ( 其中1*\mu =\varepsilon \right )\)

倍数公式:

设 \(f\left ( n\right ),g\left ( n\right )\) 为两个数论函数

如果有\[f\left ( n\right )=\sum_{n|d}g\left ( d\right )\]

那么有\[g\left ( n\right )=\sum_{n|d}\mu \left ( \frac{d}{n}\right )f\left ( d\right )\]

posted @ 2020-04-26 11:52  swsyya  阅读(626)  评论(0编辑  收藏  举报

回到顶部