简介
莫比乌斯反演是数论中的重要内容。对于一些函数
f(n)
f
(
n
)
,如果很难直接求出它的值,而容易求出其倍数和或约数和
g(n)
g
(
n
)
,那么可以通过莫比乌斯反演简化运算,求得
f(n)
f
(
n
)
的值。
开始学习莫比乌斯反演前,我们需要一些前置知识:积性函数、Dirichlet 卷积、莫比乌斯函数。
积性函数
定义
若 gcd(x,y)=1 gcd ( x , y ) = 1 且 f(xy)=f(x)f(y) f ( x y ) = f ( x ) f ( y ) ,则 f(n) f ( n ) 为积性函数。
性质
若
f(x)
f
(
x
)
和
g(x)
g
(
x
)
均为积性函数,则以下函数也为积性函数:
例子
Dirichlet 卷积
定义
定义两个数论函数 f,g f , g 的 Dirichlet Dirichlet 卷积为
性质
Dirichlet
Dirichlet
卷积满足交换律和结合律。
其中
ϵ
ϵ
为
Dirichlet
Dirichlet
卷积的单位元(任何函数卷
ϵ
ϵ
都为其本身)
例子
莫比乌斯函数
定义
μ μ 为莫比乌斯函数
性质
莫比乌斯函数不但是积性函数,还有如下性质:
证明
其中
ϵ(n)=∑d|nμ(d)
ϵ
(
n
)
=
∑
d
|
n
μ
(
d
)
即
ϵ=μ∗1
ϵ
=
μ
∗
1
设
n=∏i=1kpici,n′=∏i=1kpi
n
=
∏
i
=
1
k
p
i
c
i
,
n
′
=
∏
i
=
1
k
p
i
那么
∑d|nμ(d)=∑d|n′μ(d)=∑i=0kCik⋅(−1)k
∑
d
|
n
μ
(
d
)
=
∑
d
|
n
′
μ
(
d
)
=
∑
i
=
0
k
C
k
i
⋅
(
−
1
)
k
根据二项式定理,易知该式子的值在
k=0
k
=
0
即
n=1
n
=
1
时值为
1
1
否则为 ,这也同时证明了
∑d|nμ(d)=[n=1]
∑
d
|
n
μ
(
d
)
=
[
n
=
1
]
线性筛
由于 μ μ 函数为积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以求所有的积性函数,尽管方法不尽相同)。
代码:
void getMu() {
mu[1]=1;
for(int i=2;i<=n;++i) {
if(!flg[i]) p[++tot]=i,mu[i]=-1;
for(int j=1;j<=tot&&i*p[j]<=n;++j) {
flg[i*p[j]]=1;
if(i%p[j]==0) {
mu[i*p[j]]=0;
break;
}
mu[i*p[j]]=-mu[i];
}
}
}
拓展
证明
将
n
n
分解质因数:
首先,因为
φ
φ
是积性函数,故只要证明当
n′=pc
n
′
=
p
c
时
φ∗1=∑d|n′φ(n′d)=ID
φ
∗
1
=
∑
d
|
n
′
φ
(
n
′
d
)
=
ID
成立即可。
因为
p
p
是质数,于是
易知如下过程:
莫比乌斯反演
公式
设
f(n),g(n)
f
(
n
)
,
g
(
n
)
为两个数论函数。
如果有
那么有
证明
- 暴力计算:
用 ∑d|ng(d) ∑ d | n g ( d ) 来替换 f(nd) f ( n d ) ,再变换求和顺序。最后一步转为的依据: ∑d|nμ(d)=[n=1] ∑ d | n μ ( d ) = [ n = 1 ] ,因此在 nk=1 n k = 1 时第二个和式的值才为 1 1 。此时 ,故原式等价于 ∑k|n[n=k]⋅g(k)=g(n) ∑ k | n [ n = k ] ⋅ g ( k ) = g ( n )
- 运用卷积:
原问题为:已知
f=g∗1
f
=
g
∗
1
,证明
g=f∗μ
g
=
f
∗
μ
易知如下转化:
f∗μ=g∗1∗μ⇒f∗μ=g
f
∗
μ
=
g
∗
1
∗
μ
⇒
f
∗
μ
=
g
(其中
1∗μ=ϵ
1
∗
μ
=
ϵ
)
问题形式
- ∑i=1n∑j=1m[gcd(i,j)=k] ∑ i = 1 n ∑ j = 1 m [ gcd ( i , j ) = k ] :「HAOI 2011」Problem b
- ∑i=1nlcm(i,n) ∑ i = 1 n lcm ( i , n ) :「SPOJ 5971」LCMSUM
- ∑i=1n∑j=1mlcm(i,j) ∑ i = 1 n ∑ j = 1 m lcm ( i , j ) :「BZOJ 2154」Crash的数字表格
本文部分内容引用于 algocode 算法博客,特别鸣谢!