莫比乌斯反演-理论

$Mobius$ $inversion$ $formula$

  以后的博客都改用楷体了,还是楷体好看.

  首先既然要学莫比乌斯反演,我们就应该先知道莫比乌斯反演名字的来源,莫比乌斯函数是根据$19$世纪的数学家奥古斯特·莫比乌斯命名的.

  接下来看一下一个叫做莫比乌斯函数的东西:

  $\mu(n)= \left\{\begin{matrix}1,n=1 \\ (-1)^k,n=\prod_{i=1}^k p_i \\0,others \end{matrix}\right.$

  还有一些小的知识点:

  数论函数:定义域为$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)\times f(b)$

  完全积性函数:$f(a,b)=f(a)\times 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 }
线性筛phi
  
 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     }
线性筛mu

 

  下面是一些小证明,这次我决定把用到的结论全证一遍,因为随着时代的进步背板子题只能越来越少,而且现在时间也比较多.

  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 \binom{k}{i} (-1)^k=\sum_{i=0}^k \binom{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}^n\sum_{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 \times g) \rightarrow h(n)=\sum_{d|n}f(d) \times g( \frac{n}{d} )$

  显然$h(n)=\sum_{d|n}g(d) \times f(\frac{n}{d})$

  这就是著名的$Dirichlet$卷积.

  3.$id=\varphi \times 1$

  ​证明:

  ​$\varphi \times 1=\sum_{d|n}\varphi(d) \times 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) \times id(\frac{d}{k})$

  进行一番合式变换:

  $=\sum_{d|n}\sum_{k|d} \mu (\frac{d}{k})\times 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 \times d)|n$,也就是$d|\frac{n}{k}$.

  ​如果还是不理解就看看这个:

  例如$n=6$

  $d=1$ $\mu(1) \times 1$

  $d=2$ $\mu(2) \times 1+\mu(1) \times 2$

  $d=3$ $\mu(3) \times 1+ \mu(1) \times 3$

  $d=6$ $\mu(6) \times 1+\mu(3) \times 2+\mu(2) \times 3+\mu(1) \times 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)\times f(\frac{n}{d})$$

  尝试证明一下:

  $\sum_{d|n}\mu(d) \times f(\frac{n}{d})$

  $=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}g(k)$

  $\because qk=\frac{n}{d}$

  $\therefore 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}^n\mu(d)\sum_{d|i}\sum_{d|j}1$

  这个合式后面的部分可以算出来对吧...

  $\sum_{d=1}^n\mu(d)\frac{n}{d}\frac{m}{d}$

  这样以来式子就由$N^2logN$变成了$N$,但是还可以再优化一下,对后面的部分进行除法分块达到$\sqrt{N}$,你可能会觉得这没有用...毕竟线筛的复杂度就已经不小了,但是优化一下是没有害处的~.比如说这里的莫比乌斯前缀和可以用杜教筛,洲阁筛等奇妙筛法进一步优化.更一般的情况是多组询问...

---shzr

posted @ 2018-11-25 07:26  shzr  阅读(434)  评论(0编辑  收藏  举报