「算法笔记」莫比乌斯反演

一、积性函数

数论函数是指一个正整数到整数的映射。

积性函数:对于所有 互质 的整数 \(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]\)

然后讲一个一般套路,求:

\[\sum_{i=1}^n\sum_{j=1}^mf(\gcd(i,j)) \]

构造出 \(g\) 满足 \(f(n)=g*1=\sum_{d\mid n}g(d)\),比如 \(f=\varepsilon\) 时取 \(g=\mu\)\(f=\text{Id}\) 时取 \(g=\varphi\)

\[ans=\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid \gcd(i,j)}g(d)=\sum_{d=1}^{\min(n,m)}g(d)\sum_{i=1}^n[d\mid i]\sum_{j=1}^n [d\mid j]=\sum_{d=1}^{\min(n,m)}g(d)\lfloor\frac n d\rfloor\lfloor\frac m d\rfloor \]

整除分块即可。

六、套路总结

关于莫比乌斯反演:

  • 对于布尔类型的求和可以考虑用 \(\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\) 整除分块。
posted @ 2020-12-28 20:18  maoyiting  阅读(381)  评论(0编辑  收藏  举报