前置
数论函数:定义域为正整数的函数。
积性函数:∀(a,b)=1,f(a⋅b)=f(a)⋅f(b),f为数论函数。
莫比乌斯函数与欧拉函数都为积性函数。
迪利克雷卷积:
(f∗g)(x)=d∣x∑f(d)⋅g(dx)
迪利克雷卷积的单位元:
e(n)=[n=1]={1,0,n=1n=1
对于任意 f 有:
e∗f=d∣x∑e(d)f(dx)=f
莫比乌斯函数
μ(n)={(−1)k,0,n=p1⋅p2⋯pk⋀p1=p2=⋯=pkelse
性质
e(n)=d∣n∑μ(d)=μ∗1
证明:
设 n=∑i=1kpiqi,n′=∑i=1kpi,可以用 n′ 代替 n,因为 n 中重复的质因子即使被选入 d 中,也只会使 μ(d)=0,对 ∑d∣nμ(d) 没有贡献,故以下用 n′ 代替 n。
从 k 个质因数中选择 i 个组成因数 d,有 Cki 种选择,则
∑d∣nμ(d)=∑i=0kCki(−1)i=∑i=0kCki⋅(−1)i⋅1k−i=(−1+1)k=0k={1,0,k=0k=0
k=0 表明 n 没有质因数,那么 n=1。
∴d∣n∑μ(d)=e(n)=[n=1]
求解莫比乌斯函数
莫比乌斯函数是积性函数,所以可以用线性筛求解。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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
f(n)=d∣n∑g(d)⟹g(n)=(f∗μ)(n)=d∣n∑f(d)⋅μ(dn)
证明:
f(n)=∑d∣ng(d)⟹f=g∗1⟹f∗μ=g∗1∗μ=g∗e=g∴g(n)=(f∗μ)(n)=∑d∣nf(d)μ(dn)
形式2
f(d)=d∣n∑g(n)⟹g(d)=d∣n∑f(n)⋅μ(dn)
证明:
∑d∣nf(n)μ(dn)=∑k=1∞μ(k)f(dk)=∑k=1∞μ(k)∑dk∣tg(t)=∑d∣tf(t)∑k∣dtμ(k)=∑d∣tf(t)[dt=1]=f(d)
常用技巧:整理出 [gcd(i,j)=1],再用 ∑d∣gcd(i,j)μ(d) 替换,再枚举 d ,乘以 ⌊dn⌋⋅⌊dm⌋。
例题
入门题:
进阶:
参考
http://xiejiadong.com/?p=1173
https://oi-wiki.org/math/mobius/
https://blog.csdn.net/outer_form/article/details/50588307