前言
鸽了许久的数论从莫反开始了……
莫比乌斯函数
我们称莫比乌斯函数为 μ(d)μ(d) ,它是一个积性函数,也是一个由容斥系数构成的函数
定义
μ(d)={1(d=1)(−1)k(d=p1p2p3⋯pk)0otherwiseμ(d)=⎧⎨⎩1(d=1)(−1)k(d=p1p2p3⋯pk)0otherwise
性质
- 对于任意正整数 nn ,满足 ∑d|nμ(d)=[n=1]∑d|nμ(d)=[n=1] ,即只有 n=1n=1 是返回值为 11 ,否则为 00
- 对于任意正整数 nn,满足 ∑d|nμ(d)d=ϕ(n)n∑d|nμ(d)d=ϕ(n)n
求解
我们根据积性函数的性质,可以直接线筛出 μ(n)μ(n)
线筛代码:
inline void get_mu(int n)
{
mu[1]=1;
for(register int i=2;i<=n;++i)
{
if(!vis[i])
{
prim[++cnt]=i;
mu[i]=-1;
}
for(register int j=1;j<=cnt&&prim[j]*i<=n;++j)
{
vis[prim[j]*i]=1;
if(!(i%prim[j]))break;
else mu[i*prim[j]]=-mu[i];
}
}
}
莫比乌斯反演
好了,我们以及学会了莫比乌斯函数了,试试看,自己推出莫比乌斯反演吧
定理
F(n)F(n) 和 f(n)f(n) 是定义在非负整数集合上的两个函数,并且满足条件:
F(n)=∑d|nf(d)F(n)=∑d|nf(d)
那么存在结论:
f(n)=∑d|nμ(d)⋅F(nd)f(n)=∑d|nμ(d)⋅F(nd)
这个定理就被称作莫比乌斯反演定理
当然莫比乌斯反演也存在另外一种形式的结论,即当
F(n)=∑n|df(d)F(n)=∑n|df(d)
存在结论
f(n)=∑n|dμ(dn)⋅F(d)f(n)=∑n|dμ(dn)⋅F(d)
证明
一般来说,莫比乌斯反演的证明有两种方式,其中一种是通过定义来证明;另外一种则是利用狄利克雷卷积。这里只有第一种证明方法
∑d|nμ(d)F(nd)=∑d|nμ(d)∑i|ndf(i)=∑i|nf(i)∑d|niμ(d)=f(n)∑d|nμ(d)F(nd)=∑d|nμ(d)∑i|ndf(i)=∑i|nf(i)∑d|niμ(d)=f(n)
至此,莫比乌斯反演的基本内容就结束了,接下来有一些例题
例题
YY的gcd
[SDOI2015]约数个数
[国家集训队]Crash的数字表格
后记
如果你要想完成这些例题,你还需要掌握整除分块