「算法笔记」莫比乌斯反演
一、积性函数
数论函数是指一个正整数到整数的映射。
积性函数:对于所有 互质 的整数 \(a,b\),有性质 \(f(ab)=f(a)f(b)\) 的数论函数。常见的积性函数有:
- 约数个数函数 \(d(n)=\sum_{d\mid n} 1\)
- 约数和函数 \(\sigma (n)=\sum_{d\mid n} d\)
- 约数 \(k\) 次幂函数 \(\sigma_k (n)=\sum_{d\mid n} d^k\)
- 欧拉函数 \(\varphi (n)=\sum_{i=1}^n [\gcd(i,n)=1]\)
- 莫比乌斯函数 \(\mu (n)=\begin{cases}1&{n=1}\\(-1)^k&c_{1,2,...,k}=1\ (n=\prod_{i=1}^k p_i^{c_i})\\0&c_i>1\end{cases}\)
完全积性函数:对于所有整数 \(a,b\),有性质 \(f(ab)=f(a)f(b)\) 的数论函数。
如常数函数 \(1\),幂函数 \(\text{Id}_k(n)=n^k\)(特别地,\(\text{Id}_1(n)\) 通常记作 \(\text{Id}(n)\)),单位函数 \(\varepsilon(n)=[n=1]\)。
二、狄利克雷卷积
1. 定义与性质
定义:对于两个数论函数 \(f,g\),定义它们的 狄利克雷卷积 \(h=f*g\) 为
\(\displaystyle h(x)=\sum_{a\mid x}f(a)g\left(\frac{x}{a}\right)\)
性质:狄利克雷卷积满足交换律、结合律、对加法的分配律,有单位元 \(\varepsilon\)。
-
交换律:\(f*g=g*f\)。
-
结合律:\((f*g)*h=f*(g*h)\)。
-
分配律:\(f*(g+h)=f*g+f*h\)。
-
单位元:\(f*\varepsilon=f\)。(其中 \(\varepsilon\) 为单位函数 \(\varepsilon(x)=[x=1]\))
若 \(f,g\) 是积性函数,则 \(f*g\) 也是积性函数。
2. 常用卷积
\(\varepsilon=\mu*1 \Leftrightarrow\varepsilon(n)=\sum_{d\mid n}\mu(d)\) \(d=1*1 \Leftrightarrow d(n)=\sum_{d\mid n}1\)
\(\sigma=\text{Id}*1 \Leftrightarrow \sigma(n)=\sum_{d\mid n}d\) \(\sigma_k=\text{Id}_k*1 \Leftrightarrow \sigma_k(n)=\sum_{d|n} d^k\)
\(\varphi=\mu*\text{Id}\Leftrightarrow\varphi(n)=\sum_{d\mid n}d\cdot\mu(\frac{n}{d})\Leftrightarrow\text{Id}=\varphi*1\Leftrightarrow \text{Id}(n)=\sum_{d\mid n}\varphi(d)\)
三、莫比乌斯函数
定义:\(\mu\) 为莫比乌斯函数,定义为
\(\mu (n)=\begin{cases}1&{n=1}\\(-1)^k&c_{1,2,...,k}=1\ (n=\prod_{i=1}^k p_i^{c_i})\\0&c_i>1\end{cases}\)
性质:莫比乌斯函数是一个积性函数。
\(\sum_{d\mid n}\mu (d)=\begin{cases}1&{n=1}\\0&n\neq 1\end{cases}\),即 \(\sum_{d\mid n}\mu(d)=\varepsilon(n)\),也就是 \(\mu*1=\varepsilon\)。
- 证明:设 \(n=\prod_{i=1}^k {p_i}^{c_i},n'=\prod_{i=1}^k p_i\),那么 \(\sum_{d\mid n}\mu(d)=\sum_{d\mid n'}\mu(d)=\sum_{i=0}^k C_k^i\cdot(-1)^i=(1-1)^k=[n=1]\)。
在狄利克雷卷积的意义下,\(\mu*1=\varepsilon\),即 \(\mu\) 和 \(1\) 互为逆元。
vis[0]=vis[1]=1,mu[1]=1; for(int i=2;i<=n;i++){ if(!vis[i]) p[++cnt]=i,mu[i]=-1; for(int j=1;j<=cnt&&i*p[j]<=n;j++){ vis[i*p[j]]=1; if(i%p[j]==0){mu[i*p[j]]=0;break;} mu[i*p[j]]=-mu[i]; } }
四、莫比乌斯反演
一般有三种形式:
-
\(\sum_{d\mid n}\mu(d)=[n=1]\)。
-
\(f(n)=\sum_{d\mid n}g(d)\Leftrightarrow g(n)=\sum_{d\mid n}\mu(d)f(\frac{n}{d})\)。
证明:\(f=g*1\),两边同时卷 \(\mu\) 得 \(g=\mu*f\)(因为 \(1*\mu=\varepsilon\))。
-
\(f(n)=\sum_{n\mid d}g(d)\Leftrightarrow g(n)=\sum_{n\mid d}\mu(\frac{d}{n})f(d)\)。
证明:右边 \(\sum_{n\mid d}\mu(\frac d n)\sum_{d\mid t}g(t)=\sum_{n\mid t}g(t)\sum_{\large\frac d n\mid \frac t n}\mu(\frac d n)=\sum_{n\mid t}g(t)[\frac t n=1]=g(n)\)。
五、一些应用
可参考 莫比乌斯反演 - OI Wiki。
求解内容 | 问题形式 | 题目 |
---|---|---|
\(\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k]\) | \(\gcd\) 定值统计 | 「HAOI 2011」Problem B |
\(\sum_{i=1}^n\text{lcm}(i,n)\) | 非对称 \(\text{lcm}\) | 「SPOJ 5971」LCM Sum |
\(\sum_{i=1}^n\sum_{j=1}^m\text{lcm}(i,j)\) | 对称 \(\text{lcm}\) | 「BZOJ 2154」Crash 的数字表格 |
\(\sum_{i=1}^n\sum_{j=1}^m i\cdot j\cdot \gcd(i,j)\) | 带系数的 \(\gcd\) 统计 | 「Luogu 3768」简单的数学题 |
\(\sum_{i=1}^n\sum_{j=1}^m d(i\cdot j)\) | 约数个数统计 | 「SDOI2015」约数个数和 |
「SDOI2015」约数个数和 要用到的一个式子:\(d(i\cdot j)=\sum_{x\mid i}\sum_{y\mid j}[\gcd(x,y)=1]\)。
然后讲一个一般套路,求:
构造出 \(g\) 满足 \(f(n)=g*1=\sum_{d\mid n}g(d)\),比如 \(f=\varepsilon\) 时取 \(g=\mu\),\(f=\text{Id}\) 时取 \(g=\varphi\)。
整除分块即可。
六、套路总结
关于莫比乌斯反演:
-
对于布尔类型的求和可以考虑用 \(\varepsilon(n)=[n=1]\) 替换,再通过 \(\sum_{d\mid n}\mu(d)=\varepsilon(n)\) 来变形。
-
已知 \(f(x)\),可以考虑设一个 \(g(x)=\sum_{x\mid d}f(d)\),化简 \(g(x)\) 后,根据莫比乌斯反演,\(f(x)=\sum_{x\mid d}\mu(\frac{d}{x})g(d)\),再将 \(g\) 代入 \(f\)。
- 灵活变换枚举条件。含有向下取整的式子可以变换枚举顺序提到前面,方便 整除分块。
关于推式子:
-
常见的 \(\gcd\) 化法:一般可以枚举 \(\gcd=d\) 然后把后面的东西贡献的系数加一个 \([\gcd(i,j)=d]\),枚举 \(\large\frac i d\) 和 \(\large \frac j d\) 转化为 \([\gcd(i,j)=1]\),然后用莫反转化为 \(\sum_{p\mid i,p\mid j}\mu(p)\),交换 \(\sum\) 和 \(p\) 放到第一个枚举的位置。
-
常见的约数化法:对于 \(d\mid x\),可以考虑枚举 \(d\) 或 \(\frac{x}{d}\),改变求和顺序。对于出现了 \(\frac{n}{d}\) 的情况,有时可以考虑设 \(d'=\frac{n}{d}\) 进行变换。
-
1. 比如把 \(\sum_{i=1}^n\sum_{j=1}^m\sum_{x\mid i}\sum_{y\mid j} [\gcd(x,y)=1]\) 变成 \(\sum_{x=1}^n\sum_{y=1}^m \lfloor\frac{n}{x}\rfloor \lfloor\frac{m}{y}\rfloor [\gcd(x,y)=1]\)。
-
2. 比如把 \(\sum_{d=1}^n\sum_{d\mid i}^n\sum_{d\mid j}^m\mu(d)\cdot i\cdot j\) 变为 \(\sum_{d=1}^n\mu(d)\cdot d^2\cdot \sum_{i=1}^{\lfloor\tfrac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\tfrac{m}{d}\rfloor}i\cdot j\)。
-
3. 设 \(d'=\frac{n}{d}\)。比如把 \(\sum_{d\mid n}\frac{n^2\cdot\varphi(\tfrac{n}{d})}{d}\) 变成 \(n\cdot\sum_{d'\mid n}d'\cdot \varphi(d')\)。
-
-
有时可以将式子转化成常见的积性函数。一个简单的例子:把 \(\sum_{i=1}^x [\gcd(i,x)=1]\) 转化为 \(\varphi(x)\)。
-
对于直接贡献的可以考虑变换枚举顺序使之变成系数。比如把 \(\sum_{i=1}^x [d\mid i]\) 变为 \(\frac{x}{d}\),\(\sum_{i=1}^n\sum_{j=1}^m i\cdot j\) 变成 \(\frac{n(n+1)}{2}\times \frac{m(m+1)}{2}\)。
- 看到带有只与 \(\lfloor\large\frac{n}{dp}\normalsize\rfloor\) 有关的式子,设 \(t=dp\),然后对 \(t\) 整除分块。