前言
开始学省选算法了……
感觉莫比乌斯反演好厉害的样子,就先学习一下
一入反演深似海……
相关的东西太多了,以后会不定期更新
前置技能
莫比乌斯函数
莫比乌斯函数
设
显然,
那么我们就可以使用线性筛来得到
void prepare(){
mu[1]=1;
for (int i=2;i<=N;i++){
if (!vis[i]) p[++p[0]]=i,mu[i]=-1;
for (int j=1;j<=p[0]&&i*p[j]<=N;j++){
vis[i*p[j]]=1;
if (i%p[j]==0) {mu[i*p[j]]=0;break;}
else mu[i*p[j]]=-mu[i];
}
}
}
狄利克雷卷积
定义:对于数论函数
狄利克雷卷积的单位元为
任何数论函数
定义函数
则有:
这说明
又有:
那么可以得到
莫比乌斯反演
对于
则有莫比乌斯反演:
其实非常显然,把命题换成狄利克雷卷积的形式就是:
已知
根据
应用
求gcd=k的个数
问题:求
这是莫比乌斯反演的入门题,非常经典
推导:
然后套用莫比乌斯反演:
然后就可以对
然后就可以在
例题
YY的GCD
先考虑枚举质数p,答案就是:
设
如果能够预处理
其实可以暴枚
因为均摊每个质数是
所以预处理可以