版权声明:本博客文章为作者原创,转载请附原文链接! https://blog.csdn.net/hydingsy/article/details/81947546
简介
莫比乌斯反演是数论中的重要内容。对于一些函数
f(n)
,如果很难直接求出它的值,而容易求出其倍数和或约数和
g(n)
,那么可以通过莫比乌斯反演简化运算,求得
f(n)
的值。
开始学习莫比乌斯反演前,我们需要一些前置知识:积性函数、Dirichlet 卷积、莫比乌斯函数。
积性函数
定义
若
gcd(x,y)=1
且
f(xy)=f(x)f(y)
,则
f(n)
为积性函数。
性质
若
f(x)
和
g(x)
均为积性函数,则以下函数也为积性函数:
h(x)h(x)h(x)h(x)=f(xp)=fp(x)=f(x)g(x)=∑d|xf(d)g(xd)
例子
约数个数函数约数和函数约数 k 次幂函数欧拉函数莫比乌斯函数d(n)=∑d|n1σ(n)=∑d|ndσk(n)=∑d|ndkφ(n)=∑i=1n[gcd(i,n)=1]μ(n)=⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪1(−1)k0n=1c1,2,⋯,k=1(n=∏i=1kpici)ci>1
Dirichlet 卷积
定义
定义两个数论函数
f,g
的
Dirichlet
卷积为
(f∗g)(n)=∑d|nf(d)g(nd)
性质
Dirichlet
卷积满足交换律和结合律。
其中
ϵ
为
Dirichlet
卷积的单位元(任何函数卷
ϵ
都为其本身)
例子
ϵ=μ∗1d=1∗1σ=d∗1φ=μ∗ID⇔ϵ(n)=∑d|nμ(d)⇔d(n)=∑d|n1⇔ϵ(n)=∑d|nd⇔φ(n)=∑d|nμ(d)⋅nd
莫比乌斯函数
定义
μ
为莫比乌斯函数
性质
莫比乌斯函数不但是积性函数,还有如下性质:
μ(n)=⎧⎩⎨10(−1)kn=1n 含有平方因子k 为 n 的本质不同质因子个数
证明
ϵ(n)={10n=1n≠1
其中
ϵ(n)=∑d|nμ(d)
即
ϵ=μ∗1
设
n=∏i=1kpici,n′=∏i=1kpi
那么
∑d|nμ(d)=∑d|n′μ(d)=∑i=0kCik⋅(−1)k
根据二项式定理,易知该式子的值在
k=0
即
n=1
时值为
1
否则为
0
,这也同时证明了
∑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];
}
}
}
拓展
证明
φ∗1=ID(ID 函数即 f(x)=x)
将
n
分解质因数:
n=∏i=1kpici
首先,因为
φ
是积性函数,故只要证明当
n′=pc
时
φ∗1=∑d|n′φ(n′d)=ID
成立即可。
因为
p
是质数,于是
d=p0,p1,p2,⋯,pc
易知如下过程:
φ∗1=∑d|nφ(nd)=∑i=0cφ(pi)=1+p0⋅(p−1)+p1⋅(p−1)+⋯+pc−1⋅(p−1)=pc=ID
莫比乌斯反演
公式
设
f(n),g(n)
为两个数论函数。
如果有
f(n)=∑d|ng(d)
那么有
g(n)=∑d|nμ(d)f(nd)
证明
∑d|nμ(d)f(nd)=∑d|nμ(d)∑k|ndg(k)=∑k|ng(k)∑d|nkμ(d)=g(n)
用
∑d|ng(d)
来替换
f(nd)
,再变换求和顺序。最后一步转为的依据:
∑d|nμ(d)=[n=1]
,因此在
nk=1
时第二个和式的值才为
1
。此时
n=k
,故原式等价于
∑k|n[n=k]⋅g(k)=g(n)
原问题为:已知
f=g∗1
,证明
g=f∗μ
易知如下转化:
f∗μ=g∗1∗μ⇒f∗μ=g
(其中
1∗μ=ϵ
)
问题形式
本文部分内容引用于 algocode 算法博客,特别鸣谢!