简介
最近经常演人/被人演,所以是时候学一学反演了。
本文会从初等数论角度介绍 莫比乌斯反演公式 (Mobius inversion
formula),不过如果我们借助一点抽象代数知识引入 狄利克雷卷积 (Dirichlet
convolution)
的话便能得到更加优雅的推导~ 因此强烈安利另一篇姊妹博文:数论函数与狄利克雷卷积。
莫比乌斯函数
定义
对于正整数 n
,若对其分解质因数有
n=p1c1p2c2…pkck (ci>0)
,则:
μ(n)=⎩⎨⎧10(−1)kn=1∃ci>1otherwise
通俗地来讲,当 n=1
时,μ(n)=1
;当 n
的因子中存在完全平方数时,μ(n)=0
。对于剩余情况,也就是对 n
质因数分解可得到 n=p1p2…pk
的情况,μ(n)=(−1)k
,即 μ(n)
的值取决于 n
不同质因数的个数。
不难发现,若 a,b
互质,则有
μ(ab)=μ(a)μ(b)
。根据线性筛那一套理论,我们可以很容易地筛出 μ
。
性质
d∣n∑μ(d)={10n=1otherwise
下面给出简要证明:
- n=1
时,显然有 d∣n∑μ(d)=1
;
- n=1
时,有 k>0
。记
n=p1c1p2c2…pkck (ci>0)
。对于
d∣n
,μ(d)=0
当且仅当 d
中不存在完全平方数因子。显然,具有
i
个质因数的 d
有 (ik)
个。因此,d∣n∑μ(d)=i=0∑k(−1)k(ik)
。我们不难观察发现,这个式子就是一个二项式展开,即
(1−1)k
,故其值为 0
。
莫比乌斯反演
形式 #1
内容
定义 F(n),f(n)
均为非负整数集合上的两个函数,则有:
F(n)=d∣n∑f(d)⇔f(n)=d∣n∑μ(d)F(dn)
简而言之,利用莫比乌斯反演,只要我们知道 F(n)
或是 f(n)
中一者的定义,就可以推知另一者的具体定义。
证明
下面我们给出莫比乌斯反演的一种简要证明:
d∣n∑μ(d)F(dn)==d∣n∑μ(d)k∣dn∑f(k)k∣n∑f(k)d∣kn∑μ(d)
由前文提到的性质,当且仅当 kn=1
时
d∣kn∑μ(d)=1
;否则该式值为 0
。所以:
d∣n∑μ(d)F(dn)=f(k)
得证。
形式 #2
内容
定义 F(n),f(n)
均为非负整数集合上的两个函数,则有:
F(n)=n∣d∑f(d)⇔f(n)=n∣d∑μ(nd)F(d)
注意这一形式与上一形式最大的不同点,即求和条件由 d∣n
变为 n∣d
。
证明
令 t=nd
,有:
n∣d∑μ(nd)F(d)===t=1∑+∞μ(t)F(nt)t=1∑+∞μ(t)nt∣k∑f(k)n∣k∑f(k)t∣nk∑μ(t)
由前文提到的性质,当且仅当 nk=1
时
t∣nk∑μ(t)=1
,否则该式值为 0
。所以:
n∣d∑μ(nd)F(d)=f(n)
应用
当 F(n)
和 f(n)
中一者容易求得,而另一着不易求得时,我们可以借助莫比乌斯反演来求得不易求得的函数。
与欧拉函数联系
这里我们尝试应用一下莫比乌斯反演来推导莫比乌斯函数 μ(n)
与欧拉函数
φ(n)
间的关系。
首先欧拉函数有一个性质:
d∣n∑φ(d)=n
那么我们不妨令
F(n)=d∣n∑φ(d)=n
,运用莫比乌斯反演可得:
φ(n)==d∣n∑μ(d)F(dn)d∣n∑μ(d)⋅dn
整理后可得:
d∣n∑dμ(d)=nφ(n)
注:其实这个结论也可以利用 φ(n)
的计算公式加上容斥原理得出,而在其过程中,实际上容斥系数就是 μ(d)
。
与最大公约数联系
给定 n,m
,求满足 1≤i≤n, 1≤j≤m, gcd(i,j)=1
的数对
⟨i,j⟩
个数(其中 ⟨a,b⟩
和
⟨b,a⟩
算两个不同的数对)。
换言之,即求:
i=1∑nj=1∑m[gcd(i,j)=1]
暴力的做法显然复杂度是 O(n2)
级别的。
我们可以考虑利用莫比乌斯函数的性质:
i=1∑nj=1∑m[gcd(i,j)=1]===i=1∑nj=1∑md∣gcd(i,j)∑μ(d)d=1∑min(n,m)μ(d)i=1∑nj=1∑m[d∣gcd(i,j)]d=1∑min(n,m)μ(d)⌊dn⌋⌊dm⌋
我们可以用线性筛以 O(N)
的复杂度预处理出 μ(n)
的前缀和从而能够
O(1)
回答 μ(n)
的区间和。而面对询问时,我们可以用
O(N)
的复杂度进行整除分块并进行求解。
那么如果我们要求的是 gcd(i,j)=k
怎么办?我们仅需做如下变换:
i=1∑nj=1∑m[gcd(i,j)=k]=i=1∑⌊kn⌋j=1∑⌊km⌋[gcd(i,j)=1]
接下来就跟之前的做法一样咯,所以我们能得到:
Ans=d=1∑min(⌊kn⌋,⌊km⌋)μ(d)⌊kdn⌋⌊kdm⌋
当然,我们也可以向莫比乌斯反演的的方向进行考虑。
我们不妨记 f(k)
代表满足 gcd(i,j)=k
的 ⟨i,j⟩
对个数。那么 F(k)=k∣d∑f(d)
的意义即为满足
k∣gcd(i,j)
的 ⟨i,j⟩
对数。而求满足
1≤i≤n, 1≤j≤m
范围内 k∣gcd(i,j)
这一条件的对数显然等价于
1≤i≤⌊kn⌋, 1≤j≤⌊km⌋
范围内 1∣gcd(i,j)
的对数(显然在此范围内的所有数对都满足这一条件)。由此我们可以很容易得到 F(k)
的具体定义:
F(k)=⌊kn⌋⌊km⌋
接下来我们就可以利用莫比乌斯反演直接得到 f(k)
的具体定义了:
f(k)==k∣d∑μ(kd)F(d)k∣d∑μ(kd)⌊dn⌋⌊dm⌋
不妨令 t=kd
,我们便得到了跟之前一样的结果:
f(k)=t=1∑min(⌊kn⌋,⌊km⌋)μ(t)⌊tkn⌋⌊tkm⌋
至于更多的应用,强烈安利这篇博文:
莫比乌斯反演-让我们从基础开始。
%%%