$Mobius$ $inversion$ $formula$
以后的博客都改用楷体了,还是楷体好看.
首先既然要学莫比乌斯反演,我们就应该先知道莫比乌斯反演名字的来源,莫比乌斯函数是根据$19$世纪的数学家奥古斯特·莫比乌斯命名的.
接下来看一下一个叫做莫比乌斯函数的东西:
$mu(n)= left{egin{matrix}1,n=1 \ (-1)^k,n=prod_{i=1}^k p_i \0,others end{matrix} ight.$
还有一些小的知识点:
数论函数:定义域为$N$的函数.举几个例子:
1. $varphi (n)=sum_{i=1}^n[(i,n)==1]$
2. $id(n)=n$
3. $1(n)=1$
4. $d(n)=sum_{d|n}1$
5. $sigma (n)=sum_{d|n}d$
6. $varepsilon (n)=[n=1]$
积性函数:对于任意$(a,b)=1$,满足$f(ab)=f(a) imes f(b)$
完全积性函数:$f(a,b)=f(a) imes f(b)$
来尝试一下运用:
$mu(n)$ 和 $varphi(n)$ 都是积性函数,所以都可以线性筛:

1 # include <cstdio> 2 # include <iostream> 3 # define R register int 4 5 using namespace std; 6 7 const int maxn=100000; 8 int phi[maxn],n,pri[maxn],vis[maxn],h; 9 10 int main() 11 { 12 scanf("%d",&n); 13 phi[1]=1; 14 for (R i=2;i<=n;++i) 15 { 16 if(!vis[i]) 17 pri[++h]=i,phi[i]=i-1; 18 for (R j=1;j<=h&&i*pri[j]<=n;++j) 19 { 20 vis[ i*pri[j] ]=1; 21 if(i%pri[j]==0) 22 { 23 phi[ i*pri[j] ]=phi[i]*pri[j]; 24 break; 25 } 26 phi[ i*pri[j] ]=phi[i]*(pri[j]-1); 27 } 28 } 29 for (R i=1;i<=n;++i) 30 printf("%d ",phi[i]); 31 return 0; 32 }

1 for (R i=2;i<=n;++i) 2 { 3 if(!vis[i]) 4 pri[++h]=i,mu[i]=1; 5 for (R j=1;j<=h&&i*pri[j]<=maxn;++j) 6 { 7 vis[ i*pri[j] ]=1; 8 if(i%pri[j]) break; 9 mu[ i*pri[j] ]=-mu[i]; 10 } 11 }
下面是一些小证明,这次我决定把用到的结论全证一遍,因为随着时代的进步背板子题只能越来越少,而且现在时间也比较多.
1.$sum_{d|n}mu(d)=varepsilon (n)$
证明:
当$n=1$时显然是成立的.
首先对于 $n$ 分解质因数,得$n=prod_{i=1}^kp_i^{a_i}$
显然对于任意的$d|n$,$d=prod_{i=1}^kp_i^{b_i},b_i<=a_i$
如果$max{b_i}>1$,则$mu(d)=0$,对答案不造成影响,所以不用考虑.
那么能够影响答案的 $d$ 必然满足任意质因子的次数最多等于 $1$ ,且都是在 $n$ 中出现过的质因子.
枚举 $d$ 中含有的因子数量:
$sum_{d|n}mu(d)=sum_{i=0}^k inom{k}{i} (-1)^k=sum_{i=0}^k inom{k}{i} (-1)^k1^{-k}=(-1+1)^k=0$
2.$frac{varphi(n)}{n}=sum_{d|n}frac{mu(d)}{d}$
证明:$varphi(n)=sum_{i=1}^n[(i,n)=1]$
$varphi(n)=sum_{i=1}^nsum_{d|(i,n)}mu(d)$
变枚举约数为枚举倍数:
$varphi(n)=sum_{d|n}mu(d)sum_{d|i}^n1$
$varphi(n)=sum_{d|n}mu(d)frac{n}{d}$
$frac{varphi(n)}{n}=sum_{d|n}frac{ mu(d) }{d}$
这里好像不得不补充一点卷积的内容了.
$h=(f imes g) ightarrow h(n)=sum_{d|n}f(d) imes g( frac{n}{d} )$
显然$h(n)=sum_{d|n}g(d) imes f(frac{n}{d})$
这就是著名的$Dirichlet$卷积.
3.$id=varphi imes 1$
证明:
$varphi imes 1=sum_{d|n}varphi(d) imes 1(frac{n}{d})$
$=sum_{d|n}varphi(d)$
$=sum_{d|n}sum_{i=1}^d [(i,d)=1]$
$=sum_{d|n}sum_{i=1}^d sum_{k|(i,d)} mu(k)$
代入$(2)$中的结论:
$=sum_{d|n}sum_{k|d}mu(k) imes id(frac{d}{k})$
进行一番合式变换:
$=sum_{d|n}sum_{k|d} mu (frac{d}{k}) imes id(k)$
$=sum_{k|n}k sum_{d|frac{n}{k}} mu(d)$
再运用一下$(1)$里面的结论,只有$frac{n}{k}=1$时,后面的合式等于一,此时前边 $k=n$ ,其余时间整个合式等于$0$.
在上一步中,被放到 $mu$ 里面的那部分乘上 $k$ 是 $n$ 的一个因子.所以当我们转而枚举 $k$ 的时候,只需要$(k imes d)|n$,也就是$d|frac{n}{k}$.
如果还是不理解就看看这个:
例如$n=6$
$d=1$ $mu(1) imes 1$
$d=2$ $mu(2) imes 1+mu(1) imes 2$
$d=3$ $mu(3) imes 1+ mu(1) imes 3$
$d=6$ $mu(6) imes 1+mu(3) imes 2+mu(2) imes 3+mu(1) imes 6$
好了,现在进入正题:
$$f(n)=sum_ {d∣n}g(d)$$
已知 $g$ 求 $f$ ...好像挺简单的,求单个最少可以做到$sqrt{N}$,多个可以$O(N)$.
但是现在需要已知 $f$ 求 $g$ 了,怎么做?
如果 $n$ 非常小,是可以高斯消元的.
如果 $n$ 并不小呢?
结论一、莫比乌斯因数反演:
$$g(n)=sum_{d|n}mu(d) imes f(frac{n}{d})$$
尝试证明一下:
$sum_{d|n}mu(d) imes f(frac{n}{d})$
$=sum_{d|n}mu(d)sum_{k|frac{n}{d}}g(k)$
$ecause qk=frac{n}{d}$
$ herefore qd=frac{n}{k}$
$=sum_{k|n}g(k)sum_{d|frac{n}{k}}mu(d)$
当且仅当$k=n$,第二个合式等于 $1$ ,其余时间等于 $0$.
$=g(n)$
结论二:若 $f(n)=sum_{d|n}g(d)$,则有 $g(n)=sum_{k|n}mu(frac{n}{k})f(k)$
证明:
$g(n)=sum_{i=1}^ng(i)sum_{k|frac{n}{i}}mu(k)$
$g(n)=sum_{k|n}mu(k)sum_{i|frac{n}{k}}g(i)$
$g(n)=sum_{k|n}mu(k)f(frac{n}{k})$
$g(n)=sum_{k|n}mu(frac{n}{k})f(k)$
结论三、做题时可以直接拿来用:
$sum_{i=1}^{n}sum_{j=1}^{m}[(i,j)=1]$
因为莫比乌斯函数的性质1,且$i,j$的所有因子都是它们最大公约数的因子,可得:
$sum_{i=1}^{n}sum_{j=1}^{m}sum_{d|i,d|j} mu(d)$
现在开始插播一些套路们:
套路一:枚举约数改为枚举倍数.由于合式之间是加起来相乘的方式,用乘法分配律化开后考虑每个约数的贡献.
$sum_{d=1}^nmu(d)sum_{d|i}sum_{d|j}1$
这个合式后面的部分可以算出来对吧...
$sum_{d=1}^nmu(d)frac{n}{d}frac{m}{d}$
这样以来式子就由$N^2logN$变成了$N$,但是还可以再优化一下,对后面的部分进行除法分块达到$sqrt{N}$,你可能会觉得这没有用...毕竟线筛的复杂度就已经不小了,但是优化一下是没有害处的~.比如说这里的莫比乌斯前缀和可以用杜教筛,洲阁筛等奇妙筛法进一步优化.更一般的情况是多组询问...
---shzr