莫比乌斯函数
设正整数N分解质因数的结果为N=p1a1p2a2...pmam
μ(N)=⎩⎪⎨⎪⎧0:∃ i∈[1,m],ai>11:m≡0 (mod 2),∀ i∈[1,m],ai=1−1:m≡1 (mod 2),∀ i∈[1,m],ai=1
线性筛法
结论:μ(i)为积性函数(定义证明)
code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| void cal_pri(int x) { mu[1]=1; for(int i=2;i<=x;i++) { if(!v[i]) { v[i]=1; pri[++top]=i; mu[i]=-1; } for(int j=1;j<=top&&i*pri[j]<=x;j++) { v[i*pri[j]]=1; if(i%pri[j]==0) { mu[i*pri[j]]=0; break; } mu[i*pri[j]]=-mu[i]; } } }
|
性质
- n=1⟺∑d∣nμ(d)=0
- 结论1拓展:∑d∣gcd(i,j)μ(d)=1⟺gcd(i,j)=1
这条性质十分重要,稍后会在例题讲解
莫比乌斯变换(反演)
设f(n),g(n)为数论函数
- 若f(n)=∑d∣ng(d),则g(n)=∑d∣nμ(d)f(dn)
我们称f(n)为g(n)的莫比乌斯变换,g(n)为f(n)的莫比乌斯反演(逆莫比乌斯变换)
- 若f(n)=∑n∣dg(d),则g(n)=∑n∣dμ(nd)f(d)
证明
替换f(dn)
∑d∣nμ(d)f(dn)=∑d∣nμ(d)∑k∣dng(k)
n=k是∑d∣knμ(k)=1的充要条件
∑d∣nμ(d)∑k∣dng(k)=∑k∣ng(k)∑d∣knμ(d)=g(n)
现通过两道例题介绍莫反的两种解题思路(最终结果相同)
例题1
[HYSPZ-1001]ZAP
求解
i=1∑nj=1∑m[gcd(i,j)=k]
Solution
套路:设f(k)
f(k)=i=1∑nj=1∑m[gcd(i,j)=k]
再设g(k)
g(k)=k∣d∑f(d)
感性理解:g(k)为gcd(i,j)为k的倍数的数量,所以
g(k)=⌊kn⌋⌊km⌋
于是运用反演公式:
f(n)=n∣d∑μ(nd)g(d)
于是
f(k)=k∣d∑μ(kd)⌊dn⌋⌊dm⌋
我们设kd=t
f(k)=t=1∑nμ(t)⌊ktn⌋⌊ktm⌋
除法分块解决上述式子,即可
复杂度O(Tn)
例题2
[国家集训队]Crash的数字表格
求解
i=1∑nj=1∑mlcm(i,j)
Solution
先拆lcm
i=1∑nj=1∑mgcd(i,j)ij
枚举gcd(i,j)=d
d=1∑ndi=1∑⌊dn⌋j=1∑⌊dm⌋[gcd(i,j)=1]×ij
先对n,m分别做除法,也就是n=⌊dn⌋,m=⌊dm⌋
先不管左边式子,计算右边式子
f(n,m)=i=1∑nj=1∑m[gcd(i,j)=1]×ij
根据莫反性质:
f(n,m)=i=1∑nj=1∑md∣gcd(i,j)∑μ(d)×ij
d提前
f(n,m)=d=1∑nd∣i∑nd∣j∑mμ(d)×ij
枚举i,j的化简
f(n,m)=d=1∑n×μ(d)×d2×i=1∑⌊dn⌋j=1∑⌊dm⌋×ij
左边式子可以前缀和处理,右边式子
sum(n,m)=i=1∑nj=1∑mij=2n×(n−1)×2m×(m−1)
所以
f(n,m)=d=1∑n×μ(d)×d2×sum(⌊dn⌋,⌊dm⌋)
可以除法分块。
现在回到原式子
ans=d=1∑nd×f(⌊dn⌋,⌊dm⌋)
也可以除法分块
参考文献
- OIwiki:莫比乌斯反演,主页
- 算法竞赛进阶指南:容斥原理和Möbius函数