前言
開始學省選算法了……
感覺莫比烏斯反演好厲害的樣子,就先學習一下
一入反演深似海……
相關的東西太多了,以後會不定期更新
前置技能
莫比烏斯函數
莫比烏斯函數
設
顯然,
那麼我們就可以使用線性篩來得到
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,答案就是:
設
如果能夠預處理
其實可以暴枚
因爲均攤每個質數是
所以預處理可以