狄利克雷卷积与莫比乌斯反演入门
学之前感觉很神秘啊,但其实类似于容斥。
符号与约定
约定 $a\mid b$ 表示存在整数 $k$,使得 $ak=b$,同理有 $a\nmid b$,表示不存在那样的整数 $k$。
通常用 $\prod_i p_i^{c_i}$ 表示一个数的质因数分解,如果同时使用 $p,c$ 而不表示质因数分解会特殊说明。
狄利克雷卷积与数论函数相关概念
数论函数指定义域是正整数域 $\mathbb{Z}^+$,陪域(大概能理解为值域的超集)是复数域 $\mathbb{C}$ 的函数(但常见的的数论函数值域一般都是整数集合的子集)。它们叫数论函数貌似是因为数论非常喜欢研究这样的函数。
狄利克雷卷积
狄利克雷卷积是一种定义在数论函数上的运算,$f$ 和 $g$ 的狄利克雷卷积通常用 $f\ast g$ 来表示(就是星号 \ast
,不是点 \cdot
)。有 $(f\ast g)(n)=\sum_{xy=n}f(x)g(y)$,或者写作 $(f\ast g)(n)=\sum_{d\mid n}f(d)g(\frac{n}{d})$。
它有几乎和乘法一样的性质:
- 交换律:$f\ast g=g\ast f$,显然。
- 结合律:$(f\ast g)\ast h=f\ast (g\ast h)$,证明非常简单,因为 $\left((f\ast g)\ast h\right)(n)=\sum_{xyz=n}f(x)g(y)h(z)$,与运算顺序无关。
- 分配率:$(f+g)\ast h=f\ast h+g\ast h$,其中加法表示单点函数值相加。证明也考虑套定义,略过。
以及一个神秘性质(虽然乘法也有这个性质,但证明方法不太一样):
- $f=g\Leftrightarrow f\ast h=g\ast h$,其中数论函数 $h(x)$ 要满足 $h(1)\ne 0$。
证明
充分性显然,考虑证必要性。假设 $f\ne g$,那么必定存在一个最小的正整数 $x$,使得 $f(x)\ne g(x)$。
设 $r=f\ast h-g\ast h=(f-g)\ast h$,那么 $r(x)=\sum_{d\mid x}(f(d)-g(d))h(\frac{x}{d})$。
由于 $x$ 最小,所以所有小于 $x$ 的 $d$ 均满足 $f(d)=g(d)$,于是上式 $=(f(x)-g(x))h(1)\ne 0$,说明 $(f\ast h)(x)\ne (g\ast h)(x)$,则 $f\ast h\ne g\ast h$,与条件矛盾。故必要性成立。
然后你也能看出为什么要求 $h(1)\ne 0$。
积性函数与狄利克雷逆
在狄利克雷卷积意义下,有很多特殊函数:
- 元函数:通常用 $\varepsilon$(
\varepsilon
)表示,$\varepsilon(n)=[n=1]$,对于任意数论函数 $f$ 均有 $\varepsilon\ast f=f$,原因带入定义证即可。 - 恒等函数:通常用大写字母 $I$ 表示,$I(n)=1$。
- 单位函数:$id(n)=n$,其实是幂函数($id^x(n)=n^x$)的特殊情况,但也就它比较常用。
这些函数都是完全积性函数:
$f$ 是完全积性函数当且仅当对于任意整数 $a,b$,均有 $f(ab)=f(a)f(b)$。
那么既然有完全积性函数,那显然会定义有积性函数:
$f$ 是积性函数当且仅当对于任意整数 $a,b$ 满足 $\gcd(a,b)=1$,有 $f(ab)=f(a)f(b)$。
显然地,完全积性函数是积性函数的子集。
另外,由于单位元的存在,我们可以对数论函数定义狄利克雷逆。通常用 $f^{-1}$ 表示 $f$ 的狄利克雷逆,意义是 $f\ast f^{-1}=f^{-1}\ast f=\varepsilon$,根据 $f=g\Leftrightarrow f\ast h=g\ast h$ 的性质,同一个数论函数的狄利克雷逆唯一。
有一个性质,当且仅当 $f(1)\ne 0$ 时 $f$ 存在狄利克雷逆 $f^{-1}$。
证明
首先必要性比较简单,考虑否命题(即逆命题的逆否命题,若它为真那么逆命题为真,必要性成立)是当 $f(1)=0$,不存在狄利克雷逆。因为 $\varepsilon(1)=(f\ast f^{-1})(1)=f(1)f^{-1}(1)=1$,当 $f(1)=0$,这个方程无解。
然后考虑充分性,考虑从小到大构造 $f^{-1}$,注意到 $(f\ast f^{-1})(x)=\sum_{d\mid x}f(d)f^{-1}(\frac{x}{d})$ 中,除了 $d=1$ 都是确定的,那么构造如下:
$$ f^{-1}(x)=\frac{\varepsilon(x)-\sum_{d\mid x}^{d\ne 1}f(d)f^{-1}(\frac{x}{d})}{f(1)} $$
这样就满足 $(f\ast f^{-1})(x)=\varepsilon(x)$ 了。显然当 $f(1)\ne 1$ 时均能构造出来,并且直接暴力跑复杂度甚至是 $O(n\log n)$(调和级数)的。
积性函数的性质
若 $f$ 是一个积性函数:
- $f(1)=1$ 或 $f(1)=0$。
证明简单,因为 $f(1)=f(1)f(1)$,但是若 $f(1)=0$ 那么整个函数全是 $0$,就没什么讨论的价值了。下文默认 $f(1)=1$。
- $f(n)=\prod_i f(p_i^{c_i})$。
显然,因为所有质因子均互质,套定义即可。
- 若 $f,g$ 均为积性函数,那么 $h=f\ast g$ 为积性函数。
证明考虑套定义,对于任意两个正整数 $a,b$ 满足 $\gcd(a,b)=1$,均有:
$$ \begin{aligned} h(a)h(b) &=\sum_{c\mid a}f(c)g(\frac{a}{c})\sum_{d\mid b}f(d)g(\frac{b}{d})\\ &=\sum_{c\mid a}\sum_{d\mid b}f(cd)g(\frac{ab}{cd})\\ &=\sum_{e|ab}f(e)g(\frac{ab}{e})\\ &=h(ab) \end{aligned} $$
- 若 $f$ 为积性函数,则 $f^{-1}$ 是积性函数。
考虑数学归纳法。首先对于 $xy=1$,显然有 $f^{-1}(1)=f^{-1}(1)f^{-1}(1)$。对于 $xy>1,\gcd(x,y)=1$,假设对于所有 $\gcd(n,m)=1,nm<xy$ 均有 $f^{-1}(nm)=f^{-1}(n)f^{-1}(m)$,那么:
$$ \begin{aligned} f^{-1}(nm) &=\frac{\varepsilon(nm)-\sum_{d\mid nm}^{d\ne 1}f(d)f^{-1}(\frac{nm}{d})}{f(1)}\\ &=-\sum_{d\mid nm}^{d\ne 1}f(d)f^{-1}(\frac{nm}{d})\\ &=-\sum_{a\mid n,b\mid m}^{ab\ne 1}f(ab)f^{-1}(\frac{nm}{ab})\\ &=-\sum_{a\mid n,b\mid m}^{ab\ne 1}f(a)f(b)f^{-1}(\frac{n}{a})f^{-1}(\frac{m}{b})\\ &=f(1)f(1)g(n)g(m)-\sum_{a\mid n,b\mid m}f(a)f(b)f^{-1}(\frac{n}{a})f^{-1}(\frac{m}{b})\\ &=f(1)f(1)g(n)g(m)-\sum_{a\mid n}f(a)f^{-1}(\frac{n}{a})\sum_{b\mid m}f(b)f^{-1}(\frac{m}{b})\\ &=f(1)f(1)g(n)g(m)-(f\ast f^{-1})(n)(f\ast f^{-1})(m)\\ &=f^{-1}(n)f^{-1}(m)-\varepsilon(n)\varepsilon(m)\\ &=f^{-1}(n)f^{-1}(m) \end{aligned} $$
其中最后一步能直接去掉 $\varepsilon(n)\varepsilon(m)$ 是因为 $n,m$ 中至少一个不为 $1$。
得证。
现在我们已经对狄利克雷卷积以及积性函数有了一点点了解了,我们来讨论一些非常特殊的积性函数。
莫比乌斯反演
芜湖!进入正题。
考虑很多时候可能存在 $F=f\ast I$ 的关系,并且 $F$ 是好求的而 $f$ 不好求。通过 $f$ 求 $F$ 是简单的,可以 $O(n\log n)$ 暴力,那根据 $F$ 求 $f$ 呢?根据反演的套路,可以考虑用 $f=F\ast I^{-1}$ 来求出 $f$。因为 Möbius 把 $I^{-1}$ 命名为 $\mu$(莫比乌斯函数),所以这样的反演叫莫比乌斯反演(虽然有时候用其它函数的狄利克雷逆做的反演也叫莫比乌斯反演)。
首先显然地,$\mu$ 是一个积性函数。对于积性函数通常先考虑它在质数的次幂时的表现,那么我们先考虑 $\mu(p^k)$,其中 $p$ 是质数。
对于 $k=0$ 是平凡的,$\mu(1)=1$。
当 $k=1$ 时,$\varepsilon(p)=\sum_{d\mid p}I(d)\mu(\frac{p}{d})=I(1)\mu(p)+I(p)\mu (1)=0$,则 $\mu(p)=-1$。
当 $k>1$ 时,$\sum_{i=0}^kI(p^i)\mu(p^{k-i})=0$,其中有两个值已经确定了,即 $I(p^{k-1})\mu(p)=-1,I(p^k)\mu(1)=1$,用数学归纳法易证当 $k>1$ 时,$\mu(p^k)=0$,具体细节略。
那么对于其他 $\mu(n)$,考虑把 $n$ 拆成 $\prod_i p_i^{c_i}$,由于 $\mu$ 时积性函数可以直接把对应函数值相乘,于是有:
$$ \mu(n)=\begin{cases} 0&,\exists p,p^2\mid n\\ (-1)^k&,\text{$k$ 是 $n$ 的质因子个数} \end{cases} $$
于是就能用欧拉筛 $O(n)$ 地求 $\mu$,或者 $O(\sqrt{n})$ 地单点求 $\mu$ 了。
然后我们能得到两组简单的反演关系:
$$ F(n)=\sum_{d\mid n}f(d) $$ $$ f(n)=\sum_{d\mid n}\mu(d)F(\frac{n}{d}) $$
这个显然。
以及:
$$ F(n)=\sum_{k}f(k) $$ $$ f(n)=\sum_{k}\mu(k)F(nk) $$
(其实就是把因数换成了倍数)
这个也比较好证,仿照子集反演的证法:
$$ \begin{aligned} f(n) &=\sum_{i}\mu(i)F(ni)\\ &=\sum_{i}\mu(i)\sum_{j}f(nij)\\ &=\sum_{k}f(nk)\sum_{d\mid k}\mu(k)\\ &=\sum_{k}f(nk)\varepsilon(k)\\ &=f(n) \end{aligned} $$
但这两个其实都没啥用,不如下面这个:
$$ \sum_{d\mid n}\mu(d)=[n=1] $$
证明非常显然,左边是 $\mu \ast I=\varepsilon$,右边就是 $\varepsilon$。
常用变形:
$$ [n\mid m]\sum_{d\mid \frac{m}{n}}\mu(d)=[n=m] $$
显然。
$$ \sum_{d\mid gcd(i,j)}\mu(d)=[\gcd(i,j)=1] $$
这个就很常用了。
例题:UVA12888 Count LCM
简单推一下:
$$ \begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m[\mathrm{lcm}(i,j)=ij]\\ =&\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=1]\\ =&\sum_{i=1}^n\sum_{j=1}^m\sum_{d\mid gcd(i,j)}\mu(d)\\ =&\sum_{d=1}^{\min(n,m)}\sum_{d\mid i}^{i\le n}\sum_{d\mid j}^{j\le m}\mu(d)\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)\sum_{d\mid i}^{i\le n}\sum_{d\mid j}^{j\le m}1\\ =&\sum_{d=1}^{\min(n,m)}\mu(d)\left\lfloor\frac{n}{d}\right\rfloor\left\lfloor\frac{m}{d}\right\rfloor\\ \end{aligned} $$
然后就能整除分块 $O(\sqrt{\min(n,m)})$ 做了。
参考代码
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define forup(i,s,e) for(i64 i=(s);i<=(e);i++)
#define fordown(i,s,e) for(i64 i=(s);i>=(e);i--)
#ifdef DEBUG
#define msg(args...) fprintf(stderr,args)
#else
#define msg(...) void()
#endif
using namespace std;
using i64=long long;
#define gc getchar()
inline i64 read(){
i64 x=0,f=1;char c;
while(!isdigit(c=gc)) if(c=='-') f=-1;
while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=gc;}
return x*f;
}
#undef gc
const i64 N=1e6+5;
i64 n,m,mu[N],vv[N],sum[N];
vector<i64> pri;
void init(i64 n){
mu[1]=1;
forup(i,2,n){
if(!vv[i]){
mu[i]=-1;
pri.push_back(i);
}
for(auto j:pri){
if(1ll*i*j>n) break;
vv[i*j]=1;
if(!(i%j)){
mu[i*j]=0;
break;
}else{
mu[i*j]=-mu[i];
}
}
}
forup(i,1,n){
sum[i]=sum[i-1]+mu[i];
}
}
signed main(){
i64 t=read();
init(1000000);
while(t--){
n=read();m=read();
i64 res=0;
for(i64 l=1,r=1;l<=min(n,m);l=r+1){
r=min(n/(n/l),m/(m/l));
res+=1ll*(sum[r]-sum[l-1])*(m/l)*(n/l);
}
printf("%lld\n",res);
}
}
然后用类似的套路还能过 P2158 [SDOI2008] 仪仗队(下标从 $0$ 开始,容易发现除去 $(0,1),(1,0)$ 两个点以外和那个问题是等价的)P3455 [POI2007] ZAP-Queries(只算 $d$ 的倍数即可)。
欧拉函数
欧拉函数 $\varphi$(\varphi
)也是一个重要的数论函数函数,$\varphi(n)=\sum_{i=1}^{n-1}[\gcd(n,i)=1]$。通项公式为 $\varphi(n)=n\prod_i\frac{p_i-1}{p_i}$,感性理解考虑每 $p_i$ 个数就有一个与 $n$ 不互质,理性证明网上很好找就不展开了。
显然 $\varphi$ 是一个积性函数,因为若 $a,b$ 互质,那么 $a,b$ 没有共同质因子,带一下通项公式容易发现 $\varphi(ab)=\varphi(a)\varphi(b)$。
然后如果要求 $\varphi$,可以 $O(\sqrt{n})$ 暴力带通项公式或者线性筛求出,此处不展开。
有一个显然的结论,$\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=1]=2\left(\sum_{i=1}^n\varphi(i)\right)-1$,容易发现 $\sum_{i=1}^n\sum_{j=1}^i[\gcd(i,j)=1]=\sum_{i=1}^n\varphi(i)$,这就枚举了所有 $i\ge j$ 的情况。直接互换 $i,j$ 位置会多算所有 $i=j$ 的情况,只有 $i=j=1$ 会有贡献,于是 $-1$。
然后有一个非常厉害的结论:$\varphi \ast I=id$。
证明
由于 $id$ 是积性函数,只需要考虑 $n=p^c$ 的情况。
那么 $(\varphi \ast I)(p^c)=\sum_{k=0}^c\varphi(p^k)$。
由于 $\varphi(p^c)=p^c\cdot \frac{p-1}{p}=p^{c-1}\cdot (p-1)$,那么后面就是一个等比数列求和。
于是有:
$$ \begin{aligned} \sum_{k=0}^c\varphi(p^k) &=1+\sum_{k=1}^c p^{k-1}\cdot (p-1)\\ &=1+\sum_{k=0}^{c-1} p^k\cdot (p-1)\\ &=1+\frac{(p-1)(p^c-1)}{p-1}\\ &=p^c \end{aligned} $$
得证。
既然已经看到了 $I$,那么就应该反应出 $\mu$,于是有 $\varphi=\mu \ast id$。
这东西就非常有用了,比如可以用来求 $\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)$(假设 $n\le m$)。
$$ \begin{aligned} \sum_{i=1}^n\sum_{j=1}^m\gcd(i,j) &=\sum_{t=1}^nt\sum_{i=1}^{\left\lfloor\frac{n}{t}\right\rfloor}\sum_{i=1}^{\left\lfloor\frac{m}{t}\right\rfloor}[\gcd(i,j)=1]\\ &=\sum_{t=1}^nt\sum_{d=1}^{\left\lfloor\frac{n}{t}\right\rfloor}\mu(d)\left\lfloor\frac{n}{dt}\right\rfloor\left\lfloor\frac{m}{dt}\right\rfloor\\ &=\sum_{t=1}^nt\sum_{t\mid T}^{T\le n}\mu(\frac{T}{t})\left\lfloor\frac{n}{T}\right\rfloor\left\lfloor\frac{m}{T}\right\rfloor\\ &=\sum_{T=1}^{n}\left\lfloor\frac{n}{T}\right\rfloor\left\lfloor\frac{m}{T}\right\rfloor\sum_{t\mid T} id(t)\mu(\frac{T}{t})\\ &=\sum_{T=1}^{n}\left\lfloor\frac{n}{T}\right\rfloor\left\lfloor\frac{m}{T}\right\rfloor\varphi(T) \end{aligned} $$
这真是太酷了。
然后还有一些比较显然的,此处不展开了。