1. 程式人生 > >「莫比烏斯反演」學習筆記

「莫比烏斯反演」學習筆記

莫比烏斯反演 pre 公式 筆記 不同 mob mar margin n)

定義莫比烏斯函數$μ$$$ μ(d)=\left\{\begin{matrix} 1& n=1\\ (-1)^k&d=p_1*p_2*...*p_k \\ 0&otherwise \end{matrix}\right. $$  第二類的實質就是當$d$的質因數分解表達式中的任何一個素數的指數都小於等於$1$時,$μ(d)=(-1)^k$,其中$k$為指數為$1$的素因子個數

莫比烏斯函數有很多有用的性質。列舉如下:

[ 性質 1 ] $\sum\limits_{d|n}^{n}μ(d)=[n==1]$

證明:

根據定義,當$n=1$是顯然

我們要證明當$n>1$時,$\sum\limits_{d|n}^{n}μ(d)=0$。將$n$分解質因數得$n=p_1^{y_1}*p_2^{y_2}*...*p_k^{y_k}$。我們知道$n$的因子實際上就是各個質數個數的組合。而當任何一個質數的個數超過$1$時莫比烏斯函數值一定為$0$,可以不管。因此我們只需要考慮有多少個質因數的指數為$1$。因此以上式子可以化為$$\sum\limits_{i=0}^{k}C^{i}_{k}*(-1)^i$$

利用二項式定理得$$\sum\limits_{i=0}^{k}\binom{k}{i}(-1)^i1^{k-i}$$

等於$$[(-1)+1]^k=0$$

有了這個結論,當我們需要處理一下問題時都可套用。例如求$0<i \leq n, 0<j \leq m$範圍內,$gcd(i,j)=1$的對數。可以套用公式:

$$\sum\limits_{d|gcd(i,j)}^{gcd(i,j)}μ(gcd(i,j))=[gcd(i,j)==1]$$

因此$$\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}[gcd(i,j)==1]=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\sum\limits_{d|gcd(i,j)}^{gcd(i,j)}μ(gcd(i,j))$$還可以繼續化簡,但是我太弱了還沒學會,待更…………

[ 性質 2 ] $μ$函數為積性函數:$μ(m*n)=μ(m)*μ(n)$ 其中$(m,n)=1$

證明:

統統分類討論即可。

設$m=p_1^{x_1}*p_2^{x_2}*...*p_k^{x_k}$

設$n=q_1^{y_1}*q_2^{y_2}*...*q_t^{y_t}$

則$m*n=p_1^{x_1}*p_2^{x_2}*...*p_k^{x_k}*q_1^{y_1}*q_2^{y_2}*...*q_t^{y_t}$

當$μ(m)=0或μ(n)=0$時,一定存在一個$i$滿足$x_i>1$或$y_i>1$,因此$μ(m*n)=0$成立

當$μ(m)=1,μ(n)=1$或者$μ(m)=-1,μ(n)=-1$時,$k,t$奇偶性相同,則$k+t$為偶數,因此$μ(m*n)=1$成立

當$μ(m)=1,μ(n)=-1$或者$μ(m)=-1,μ(n)=1$時,$k,t$奇偶性不同,則$k+t$為奇數,因此$μ(m*n)=-1$成立

這幾條都非常顯然吧,還是非常容易證的

線性求莫比烏斯函數

莫比烏斯函數的線性求法依賴於線性篩素數(歐拉篩)。

其本質很簡單,對於任何一個素數$p$一定滿足$μ(p)=-1$。

然後如果存在重復的素因子了,即$i \% prime[j] = 0$時,$μ$一定為0. 對於其他情況,相當於在$i$的基礎上又乘上了一個新的質因子$prime[j]$,此時就應當乘上$-1$

inline void getMobius(){
    mu[1] = 1; //μ函數的1是特殊情況 
    for(int i = 2; i <= 1e6; ++i){
        if(!b[i]){
            prime[++tot] = i;
            mu[i] = -1; //質數的μ值一定為-1 
        }
        for(int j = 1; j <= tot; ++j){
            if(i * prime[j] > 1e6) break;
            b[i * prime[j]] = 1;
            if(i % prime[j] == 0){
                mu[i * prime[j]] = 0;//i中已經包括了prime[j] 
                break;
            }
            else{
                mu[i * prime[j]] = -mu[i];//不能整除,意味著i中原沒有prime[j]這個素因子 
            }
        }
    }
}

還沒來得及開始介紹反演就寫了那麽多了……剩余部分待更……

「莫比烏斯反演」學習筆記