1. 程式人生 > >【莫比烏斯反演】——蒟蒻的理解

【莫比烏斯反演】——蒟蒻的理解

col oid eps div 約數個數 符號 並且 sil 線性篩

  序:最近被反演虐的不要不要的,遂決定寫一篇博文,防止以後自己翻車……

1.定義

  莫比烏斯函數:$\mu(n)$

$\begin{cases}
& \text{ if } x= \prod_{i=1}^kp_i\;\;\mu(x)=(-1)^k\\
\\
& \text{ else }\;\;\;\;\;\;\;\;\;\;\;\;\;\; \mu(x)=0
\end{cases}$

   我們引入一個概念,狄利克雷卷積。即$(f*g)(n)=\sum_{d|n}f(d)*g(\frac n d)$。顯然,狄利克雷卷積是滿足交換律的。同時其也滿足結合律與分配率。

  在引入一個概念,積性函數,即函數$f$對於互質的兩個數$i,j$滿足$f(i*j)=f(i)*f(j)$。其中如果對於任意$i,j$滿足$f(i*j)=f(i)*f(j)$,我們稱其為完全積性函數。

  再例舉一些函數的符號:歐拉函數$\phi$,約數個數函數$d$,約數和函數$\sigma$,單位函數$id(n)=n$,元函數$\varepsilon(n)$,當n為1時,$\varepsilon(n)=1$,否則$\varepsilon(n)=0$,以及不變的函數$1(n)=1$。

  這裏給出一個線性篩的板子:

  

 1 const int N=1e7+1;
 2  
 3
int miu[N],prim[N/5],num,sum[N]; 4 bool vis[N]; 5 6 inline void init(){ 7 miu[1]=1; 8 sum[1]=1; 9 for(int i=2;i<N;i++){ 10 if(!vis[i]) 11 prim[++num]=i,miu[i]=-1; 12 for(int j=1;prim[j]*i<N;j++){ 13 vis[i*prim[j]]=1; 14 if
(i%prim[j]==0){ 15 miu[i*prim[j]]=0; 16 break; 17 } 18 miu[i*prim[j]]=-miu[i]; 19 } 20 sum[i]=sum[i-1]+miu[i]; 21 } 22 }

2.莫比烏斯函數的性質

  這一段是從目前做過的題總結的,以後沒準還得改(沒準寫的不夠……

   莫比烏斯函數一個十分總要的性質,即$(\mu *1)(n)$當且僅當$n==1$時,為1,否則為0。

  關於這個的證明用 二項式定理+唯一分解定理 是很好證明的,這裏就不多說了。

3.莫比烏斯反演

  關於這塊,一來是式子太長,二來是百度已經寫得很全面了,所以蒟蒻就不獻醜了。

  參考鏈接:百度百科。

  我想,這裏比較重要的一個性質是:$F(n)=(f*1)(n)$,若$f$為積性函數,則$F(n)$也是積性函數。

  證明如下:

  設$\gcd (n,p)==1$。

  $F(n*p)=\sum_{i|n}\sum_{j|p}f(i*j)=\sum_{i|n}f(i)\sum_{j|p}f(j)=F(n)*F(p)$

  證畢。

  這個性質在我們反演出一個形如$ans=\sum_{i=1}^{n}g(i)\sum_{d|i}f(d)$的式子時,若$f$為積性函數,則我們可以將這個式子時間復雜度優化到至少$O(n)$。

  例如:

  $$F(n)=\sum_{i|n}\mu(i)*i*n$$

4.關於做題

  這個我也沒有什麽發言權,畢竟我太弱了……但還是想總結一下自己的想法。

  反演最重要的是$gcd(i,j)==1$等價為$\sum_{d|t}\mu(d),t=gcd(i,j)$這一式子,在目前所遇到的題目中,關鍵都是如何將題目給出的內容轉化為$gcd$,並且正確的化解,這個我也不怎麽會,只能多練習了。

5.總結

  個人覺得一些基本證明會不會都不是很重要,畢竟也不可能考為什麽$id=(\phi*1)$之類的,明白其過程,對思考有啟發就足以。

6.一些題目:

   BZOJ YY的GCD

  BZOJ 4176 Lucas的數論
  BZOJ 3930 CQOI2015 選數
  bzoj2693: jzptab
  BZOJ 4174 tty的求助
  BZOj 3601:一個人的數論

【莫比烏斯反演】——蒟蒻的理解