也许更好的阅读体验
前置技能
- 学会莫比乌斯函数必须要先知道狄利克雷函数
- 以及什么是逆元(一本正经胡说八道)
狄利克雷卷积
两个函数 f,g
f∗g(n)=d∣n∑nf(d)g(dn) - 性质
交换律 f∗g=g∗f
结合律 f∗g∗h=f∗(g∗h)
加法分配率 f∗(g+h)=f∗g+f∗h
几个定理
- ① 定义单位函数 I(n)=[n=1],即只有当n等于1时, I(1)=1,其余情况都为0
- ② I∗f=f
- ③ 已知函数 f,定义函数 f的逆 f−1,满足 f∗f−1=I,且积性函数的逆也是积性函数
- ④ 由③可得 f−1(1)=f(1)1
- ⑤ 令 ξ(n)=1
莫比乌斯函数
- 莫比乌斯函数 μ=ξ−1
n=p1a1⋅p2a2⋅⋯pkak
μ(n)=ξ−1(n)=⎩⎨⎧1(−1)k0n=1a1=a2=⋯=ak=1otherwise
如何推导
-
如何求逆
③等价于
∀n:d∣n∑f(d)⋅f−1(dn)=[n=1]
d∣n∑f(d)⋅f−1(dn)=I(n)(n≠1)=0
f−1(n)⋅f(1)=−∑d∣n,d≠1f(d)⋅f−1(dn)
f−1(n)=f(1)−∑d∣n,d≠1f(d)⋅f−1(dn)
-
莫比乌斯函数
令 f=ξ, p为质数
f−1(1)=1
f−1(p)=f(1)−f(p)⋅f−1(1)=−1
f−1(p2)=−(f(p2)⋅f−1(1)+f(p)⋅f−1(p))=0
f−1(p3)=−(f(p3)⋅f−1(1)+f(p2)⋅f−1(p)+f(p)⋅f−1(p2))=0
f−1(pk)=−i=1∑kf(pi)⋅f−1(pk−i)
其中只有 f(pk)⋅f−1(1)=1,f(pk−1)⋅f−1(p)=−1,其余项都是0
f−1(pk)={−10k=1k>1
n=p1a1⋅p2a2⋅⋯pkak
所以莫比乌斯函数可以推出来了
μ(n)=f−1(n)=⎩⎨⎧1(−1)k0n=1a1=a2=⋯=ak=1otherwise⇐积性函数推出
莫比乌斯函数的性质
- μ∗ξ=I
因为 μ=ξ−1
所以有 d∣n∑nμ(d)=d∣n∑nμ⋅1=μ∗ξ(n)=I(n)=[n=1]
记住这句,下面的证明要用到 - I∗f=f
- f∗μ∗ξ=f
- f∗ξ=g,f=g∗μ
线性筛
利用积性函数的性质以及 μ的表达式
int cnt;
int prime[maxn],mu[maxn];
bool vis[maxn];
void mu_sieve (int n)
{
mu[1]=1;
for (int i=2;i<=n;++i){
if (!vis[i]){ prime[++cnt]=i,mu[i]=-1;}
for (int j=1;j<=cnt&&i*prime[j]<=n;++j){
vis[i*prime[j]]=true;
if (i%prime[j]==0){
mu[i*prime[j]]=0;
break;
}
mu[i*prime[j]]=-mu[i];
}
}
}
莫比乌斯反演
-
若有 g(n)=d∣n∑f(d)
则有 f(n)=d∣n∑μ(d)g(dn)=d∣n∑μ(dn)g(d)
-
证明
法一 d∣n∑μ(d)g(dn)=d∣n∑μ(d)x∣dn∑f(x)=x∣n∑f(x)d∣xn∑μ(d)=x∣n∑f(x)[xn=1]=f(n)
法二 g=f∗ξ,f=g∗μ
-
若有 g(n)=n∣d∑f(d)
则有 f(n)=n∣d∑μ(nd)g(d)
-
证明
n∣d∑μ(nd)g(d)=k=1∑+∞μ(k)g(kn)=k=1∑+∞μ(k)kn∣d∑f(d)=n∣d∑f(d)k∣nd∑μ(k)=n∣d∑f(d)[nd=1]=f(n)
这一种一般用的比较多
莫比乌斯反演的应用
莫比乌斯函数一般用于 gcd中
i=1∑nj=1∑mgcd(i,j)=d∑min(n,m)di=1∑nj=1∑m[gcd(i,j)=d]=d∑min(n,m)di=1∑dnj=1∑dm[gcd(i,j)=1]=d∑min(n,m)di=1∑dnj=1∑dmk∣gcd(i,j)∑μ(k)=d∑min(n,m)dk∑min(dn,dm)μ(k)k∣i∑dnk∣j∑dm=d∑min(n,m)dk∑min(dn,dm)μ(k)⌊kdn⌋⌊kdm⌋
令 T=kd
=T∑min(n,m)⌊Tn⌋⌊Tm⌋k∣T∑kTμ(k)
以上是莫比乌斯反演推出来的式子
=T∑min(n,m)⌊Tn⌋⌊Tm⌋φ(T)
这一步是欧拉反演,证明请移步欧拉函数|(扩展)欧拉定理|欧拉反演
当然,这里这个例子不如直接用欧拉反演
i=1∑nj=1∑mgcd(i,j)=i=1∑nj=1∑md∣gcd(i,j)∑φ(d)=d=1∑min(n,m)⌊dn⌋⌊dm⌋φ(d)
如有哪里讲得不是很明白或是有错误,欢迎指正
如您喜欢的话不妨点个赞收藏一下吧