莫比乌斯函数
定义
莫比乌斯函数是一个数论函数,定义如下:
μ(n)=⎩⎪⎪⎨⎪⎪⎧1,n=1(−1)k,n是k个不同质数的乘积0,n含有平方因子
例如:
μ(1)=1,μ(2)=−1,μ(6)=1,μ(12)=0
性质
莫比乌斯函数是积性函数,也就是:
(m,n)=1⇒μ(mn)=μ(m)μ(n)
恒等式
下面的恒等式十分重要:
ϵ(n)=d∣n∑μ(n)={1,n=10,n>1
我们称 ϵ(n) 为单位函数
这个恒等式是符合直觉的:假设 n 的不同质因子个数为 r,从中挑选一个子集相乘就可以得到 n 的一个因子 d,所以:
- 无平方因子有 2r 个
- 其中:
- 2r−1 个具有偶数个质因子(μ=1)
- 2r−1 个具有奇数个质因子(μ=−1)
把它们加起来,结果为0。这说明了因子的“计数对称性”
这个恒等式有一个常见应用:
[i⊥j]=[(i,j)=1]=d∣(i,j)∑μ(d)=d∑[d∣i][d∣j]μ(d)
它将互素的条件转化为关于莫比乌斯函数的求和式,方便进一步推导
求法
如果只需要计算单个 n 的莫比乌斯函数值 μ(n),直接根据定义,对 n 进行质因数分解即可,时间复杂度为 O(n)
当然,莫比乌斯函数是积性函数,可以利用线性筛求出 n 以内的所有莫比乌斯函数值,时间复杂度为 O(n)
狄利克雷卷积
数论函数 f(n) 和 g(n) 的 狄利克雷卷积 ,记作 f∗g,定义为数论函数
(f∗g)(n)=k∣n∑f(k)g(kn)=kl=n∑f(k)g(l)
单位函数 ϵ 是莫比乌斯函数 μ 和常数函数 1 的狄利克雷卷积:
ϵ=μ∗1⇔ϵ(n)=d∣n∑μ(d)
约数个数函数 r 是常数函数 1 和它自身的狄利克雷卷积:
r=1∗1⇔r(n)=d∣n∑1
约数和函数 σ 是恒等函数 id 和常数函数 1 的狄利克雷卷积:
σ=id∗1⇔σ(n)=d∣n∑d
欧拉函数 ϕ 是恒等函数 id 和莫比乌斯函数 μ 的狄利克雷卷积:
ϕ=id∗μ⇔ϕ(n)=d∣n∑d⋅μ(dn)
性质
狄利克雷卷积满足交换律、结合律、分配律,这里不一一证明。并且,如果把狄利克雷卷积看成一个数论函数上的二元关系,可以发现其单位元、零元和逆元:
- 单位元:ϵ(n),这是因为有 (f∗ϵ)(n)=∑d∣nf(d)ϵ(n/d)=f(n),因为只有 d=n 时ϵ(n/d)=1,其余为0
- 零元:全零函数 0
- 逆元:数论函数 f 的狄利克雷逆元 g 满足 f∗g=ϵ,特别的,有 (f∗g)(1)=f(1)g(1)=1,所以,f 的狄利克雷逆元存在,当且仅当 f(1)=0
数论函数 f 的狄利克雷函数的值是可以递推计算的,首先有:
g(1)=f(1)1
接下来,当 n>1 时:
(f∗g)(n)=d∣n∑f(d)g(dn)=ϵ(n)=0
将 d 分成 1<d≤n 和 d=1 两类,就有:
d∣n,1<d≤n∑f(d)g(dn)+f(1)g(n)=0
把 g(n) 解出来,就有:
g(n)=−f(1)∑d∣n,d=1f(d)g(dn)
这样就可以递推求解了
同时易证:两个积性函数的狄利克雷卷积也是一个积性函数,这可以帮助我们判断形如 ∑d∣nf(d)g(dn) 的积性,从而判断能否使用线性筛法
莫比乌斯反演
对于一些函数 f(n),如果很难直接求出他的值,但是容易求出其倍数和或约数和 g(n),那么就可以使用莫比乌斯反演简化计算
设 f,g 是两个数论函数,则有:
f(n)=d∣n∑g(d)⇔g(n)=d∣n∑μ(dn)f(d)
写成狄利克雷卷积的形式,有:
f=1∗g⇔g=μ∗f
这个证明是显然的,因为前面我们知道,单位函数 ϵ 是莫比乌斯函数 μ 和常数函数 1 的狄利克雷卷积,在左式两边同时对 μ 做狄利克雷卷积,就有:
f∗μ=(1∗g)∗μ=(1∗μ)∗g=ϵ∗g=g
欧拉函数 ϕ(n) 满足 n=∑d∣nϕ(d),即 id=1∗ϕ,对其反演得到 ϕ=μ∗id,即
ϕ(n)=d∣n∑dμ(dn)
除数函数 σk(n)=∑d∣ndk,即 σk=1∗idk,对其反演得到 idk=μ∗σk,即
nk=d∣n∑μ(dn)σk(d)
我们之前考虑的反演都是对于 n 的某一因数 d,当然也可以考虑其倍数:
f(n)=n∣d∑g(d)⇔g(n)=n∣d∑μ(nd)f(d)
证明略,这是显然的
狄利克雷前缀和
用处不大,了解一下就好
考虑基本的莫比乌斯反演关系:
f(n)=d∣n∑g(d)
假如说知道 {g(k)}k=1n 的值,我们可以使用类似前缀和的方式来求出{f(k)}k=1n 的值,只需要考虑因数 d 对 f(k) 的贡献,将其累加起来即可
对于高维前缀和,我们有一种求法是:遍历所有的维度,并将每个位置的值都累加到该位置在该位置上的后继位置,在这个问题中,我们可以考虑每个素数 p,和 p 同维的位置有 2p,3p,…,考虑到 np 时,只需要将 n 处的函数值加到 np 处即可
这个遍历顺序和埃氏筛是一致的,因此我们可以在 O(nloglogn) 的时间内计算出 {f(k)}k=1n 的值,我们称其为狄利克雷前缀和
常见变形
gcd和lcm相关的变形
[(i,j)=k] 可以转化成 [(ki,kj)=1],用莫比乌斯函数的性质就可以转化成 ∑d[d∣ki][d∣kj]μ(d)
例如,求下面式子的值:
f(n,m,k)=i=x∑nj=y∑m[(i,j)=k]
做如下变换:
f(n,m,k)=i=x∑nj=y∑m[(i,j)=k]=i=⌈kx⌉∑⌊kn⌋j=⌈ky⌉∑⌊km⌋[(i,j)=1]=i=⌈kx⌉∑⌊kn⌋j=⌈ky⌉∑⌊km⌋d∑[d∣i][d∣j]μ(d)=d∑μ(d)i=⌈kx⌉∑⌊kn⌋[d∣i]j=⌈ky⌉∑⌊km⌋[d∣j]=d∑μ(d)(⌊d⌊kn⌋⌋−⌊d⌈kx⌉−1⌋)(⌊d⌊km⌋⌋−⌊d⌈ky⌉−1⌋)
推导的过程运用了莫比乌斯函数的性质,以及区间内倍数个数的计算(容斥原理)
这个公式接下来可以把后面的两个括号拆开在展开整理一下,能够得到四项,其中每一项都是如下的乘积形式:
d∑μ(d)⌊dU⌋⌊dV⌋
只需要线性筛一下莫比乌斯函数,求一下前缀和,就可以使用数论分块来求解这个式子,对于原式只需要进行四个值的组合即可,时间复杂度为 O(N+N)
求下面式子的值:
S(n)=i=1∑nlcm(i,n)
首先,先转化成gcd;
S(n)=i=1∑n(i,n)in=ni=1∑n(i,n)i
设 d=(i,n),那么每个 i 必须写成 i=dj,则有 (j,dn)=1,代回去得:
S(n)=nd∣n∑1≤j≤dn∑j[(j,dn)=1]
注意到 ∑1≤j≤dnj[(j,dn)=1] 表示 [1,dn] 中与 dn 互质的数的和,自然联想到欧拉函数 ϕ,当 dn>1 时,ϕ(dn) 总是偶数,这是因为假如 i⊥dn,那么 dn−i⊥dn,它们是成对出现的,并且它们的和为 dn,故原式转化为:
S(n)=nd∣n∑2ϕ(dn)dn=nd∣n∑2ϕ(d)d
接下来线性筛一下欧拉函数即可
求下面表达式的值:
f(n,m)=i=1∑nj=1∑mlcm(i,j)
依旧lcm转化成gcd,得到:
f(n,m)=i=1∑nj=1∑m(i,j)ij=i=1∑nj=1∑mk∑kij[(i,j)=k]=i=1∑⌊kn⌋j=1∑⌊km⌋k∑kij[(i,j)=1]=i=1∑⌊kn⌋j=1∑⌊km⌋k∑kijd∑[d∣i][d∣j]μ(d)=k∑kd∑μ(d)(i=1∑⌊kn⌋i[d∣i])(j=1∑⌊km⌋j[d∣j])
对于后面的两个式子,显然有:
i=1∑⌊kn⌋i[d∣i]=di=1∑⌊d⌊kn⌋⌋i=2⌊d⌊kn⌋⌋(⌊d⌊kn⌋⌋+1)d
可知后面两个式子可以数论分块计算,但是我们需要知道前面两个和式的前缀和,令 G(n)=2n(n+1),做换元 l=kd,式子化为:
f(n,m)=l∑ld∣l∑μ(d)dG(⌊ln⌋)G(⌊lm⌋)
发现函数 F(l)=l∑d∣lμ(d)d 是积性函数,可以直接线性筛并求出它的前缀和,然后就可以使用数论分块计算 f(n,m) 的值了