狄利克雷卷積&莫比烏斯反演


狄利克雷卷積

定義:如果函數 \(F,f,g\) 滿足:

\(F(n)=\sum\limits_{d|n}f(d)g(\frac{n}{d})\)

\(F\)\(f\)\(g\) 的狄利克雷卷積,記作 \(F=(f∗g)\),或 \(F(n)=(f∗g)(n)\)

顯然,狄利克雷卷積滿足交換律和分配律。

常見的完全積性函數

1.常函數 \(I(n)=1\)

2.恆等函數 \(id(n)=n\)

3.單位函數 \(\varepsilon(n)=[n=1]\) 又叫單位元

性質1:

  • \(f∗ε=f\) (任何函數*單位元=本身)

  • 證明:

    \((f∗ε)(n)=\sum \limits_{d|n} f(d)ε(\frac{n}{d})\)

    所以當且僅當 \(\varepsilon(\frac{n}{d})=1\) 時,后面式子不為 \(0\) ,即 \(d=n\) 時,所以 \((f*\varepsilon)(n)=f(n)\)

性質2:

  • \(μ∗I=ε\)\(\sum\limits_{d|n} \mu(d) = [n==1]\)

  • 證明:

    \(n=1\) 時,\(\mu(1)=\varepsilon(1)=1\)

    需要證明的是當 \(n>1\) 時,\(\sum\limits_{d|n} \mu(d) =0\)

    首先將 \(n\) 進行質因數分解,即 \(n=p_1^{a_1}*p_2^{a_2}....*p_n^{a^n}\)

    因為當且僅當 \(n\) 中質因數的冪次都為 \(1\) 時,\(\mu(n)\) 才有值,所以我們不妨直接將指數去掉變為 \(n=p_1*p_2...p_n\) ,此時問題就變為了在 \(n\) 個質數中選 \(k\) 個的方案數再*上對應的權值,用式子表示出來就是:

    \[\sum\limits_{d|n} \mu(d)=\sum\limits_{k=0}^{n} C_n^k (-1)^k=\sum\limits_{k=0}^n C_n^k(-1)^k(1^{n-k}) \]

    因為二項式定理:

    \[(a+b)^n=\sum\limits_{k=0}^n C_n^k a^k b^{n-k} \]

    所以

    \[\sum\limits_{k=0}^n C_n^k(-1)^k(1^{n-k})=((-1)+1)^n=0 \]

性質3:

  • \(\varphi*I=id\)\(\sum\limits_{d|n} \varphi(d)=n\)

  • 證明:

    \[n=\sum\limits_{i|n}\sum\limits_{j=1}^n [gcd(j,n)=i] \\ =\sum\limits_{i|n}\sum\limits_{j=1}^{\frac{n}{i}}[\gcd(j,\frac{n}{i})=1] \\ =\sum\limits_{i|n}\varphi(\frac{n}{i})=\sum\limits_{i|n}\varphi(i) \]

    第一步轉化是等價於將 \(n\) 個數按照 \(\gcd\) 分類,個數和為 \(n\) 。第二步是因為 \(\gcd(kx,ky)=k\),所以 \(\gcd(x,y)\) 於是可以把這個 \(k\) 除出去。

性質4:

\(\mu*id=\varphi\)\(\varphi(n)=\sum\limits_{d|n} \mu(d)*(n/d)\)

其實這個直接用卷積代換就可以證明了:

  • 證明:

    由之前的性質可以知道:\(\mu*I=\varepsilon , \ \ id=\varphi*I\)

    所以可以推出:\(\mu*id=\mu*\varphi*I=(\mu*I)*\varphi=\varepsilon*\varphi=\varphi\)

性質5:

\(d=I*I\)

  • 證明:

    直接定義拆開:\(d(n)=\sum\limits_{d|n} 1\)

    就是約數的定義了呀。

性質6

\(\sigma=I*id\)

  • 證明

    老定義證明了。。\(\sigma(n)=\sum\limits_{d|n} 1*id(d)\)

    顯然。

性質7

\(\mu*d=I\)

還是直接卷積代換吧:

  • 證明:

    \(d=I*I\)

    \(\mu*d=\mu*I*I=(\mu*I)*I=\varepsilon*I=I\)

    上面的證明大部分都是照着這位大佬的博客打的,如果講的不清楚可以看一看,寫的很好!

上面性質的匯總:

\(d=I*I\)

\(\sigma=I*id\)

\(\mu*id=\varphi\)

\(\varphi*I=id\)

\(μ∗I=ε\)

\(f∗ε=f\)

莫比烏斯反演

WJX的整除分塊小總結

聽過許多次也考了好幾次了,被教練叫過來學了。

首先一切的一切,得從莫比烏斯函數講起:

定義函數 \(\mu(x)\) (莫比烏斯函數)。

\(\mu(x)\) 只有 \(3\) 種取值,\(-1,0,1\) 分別表示:

\(-1\) : \(x\) 的質因子的最高冪次為 \(1\) ,並且有奇數個質因子。

\(0\) : \(x\) 的質因子的最高冪次 \(\geq1\)

\(1\) : \(x\) 的質因子的最高冪次為 \(1\) ,並且有偶數個質因子。

簡單來說就是:當 \(x\) 的質因子最高冪次為 \(1\) 時,\(\mu(x)=(-1)^k\)\(k\) 表示質因子個數。

否則 \(\mu(x)=0\)

並且規定 \(\mu(1)=1\)

關於容斥系數:

其實如果你懂歐拉函數(\(\phi(x)\))容斥的推導過程:

即:\(\varphi(n) = n(1-\frac{1}{p_1}-\frac{1}{p_2}-\cdots+\frac{1}{p_1p_2}+\frac{1}{p_1p_3}+···+\frac{1}{p_{m-2}p_{m-1}}-\frac{1}{p_1p_2p_3}-···)\)

你會發現:當分母有奇數個質數的時候,前面的符號為 \(-\) ,偶數個質數的時候,符號為 \(+\) 。(雖然剛剛好與莫比烏斯函數的取值相反)

但是你也可以大概懂得為什么莫比烏斯函數被叫做容斥系數,許多時候計算關於因數的一些東西的時候,莫比烏斯函數就可以讓容斥變得簡單許多。

莫比烏斯函數的一些小性質:

借用別的大佬的一段話:

首先,我們可以先明確一點,莫比烏斯函數並不是什么很高大上的東西,它其實只是一個由容斥系數所構成的函數。

1. 是個積性函數

這一點感性理解就好了,也是 \(\mu(x)\) 可以線性篩 \(\Theta(n)\) 求的基礎。

2.聯系歐拉函數

對於任意的正整數 \(n\)\(\sum\limits_{d|n} \frac{\mu(d)}{d}=\frac{\varphi(n)}{n}\)

很常用的一個性質

對於任意的正整數 \(n\)\(\sum\limits_{d|n} \mu(d) = [n==1]\) 這個下面的許多推導都會用到。證明見狄利克雷卷積性質 2。

線性篩莫比烏斯函數:

直接給出代碼好了,畢竟挺好理解的。

inline void Init_mu(int lim){
    mu[1]=1;
    for(register int i=2;i<=lim;++i){
        if(!isprime[i]) prime[++tot]=i,mu[i]=-1;
        for(register int j=1;j<=tot&&prime[j]*i<=lim;++j){
            isprime[i*prime[j]]=true;
            if(i%prime[j]==0)   break;
            else mu[i*prime[j]]=-mu[i];
        }
    }
    return;
}

莫比烏斯反演

  • 定義兩個函數 \(g(n)\)\(f(n)\)

    莫比烏斯反演的因數形式

  • 莫比烏斯反演定理:對於這兩個定義在非負整數幾何上的兩個函數並且滿足:

    \[g(n)=\sum_{d|n} f(d) \]

    則:

    \[f(n)=\sum_{d|n} \mu(d) g(\frac{n}{d}) \]

  • 證明:(先展示不用卷積的證明方法)

1.將 \(f(n)\) 拆開

\[\sum_{d|n}\mu(d) g(\frac{n}{d})=\sum_{d|n}\mu(d) \sum_{k|\frac{n}{d}} f(k) \]

2.因為 \(d\)\(\frac{n}{d}\) 是成對出現的,這個式子還可以變為:

\[\sum_{k|n} f(k)\sum_ {d|\frac{n}{k}} \mu(d) \]

3.因為上面 \(\sum_{d|n} \mu(d) = [n==1]\) 所以當且僅當\(\frac{n}{k}==1\) 時,才會用值,即\(k==n\) 時,所以

\[\sum_{k|n} f(k)\sum_ {d|\frac{n}{k}} \mu(d)=f(n) \]

最后給出整個過程:

\[\sum_{d|n}\mu(d) g(\frac{n}{d})=\sum_{d|n}\mu(d) \sum_{k|\frac{n}{d}} f(k)=\sum_{k|n} f(k)\sum_ {d|\frac{n}{k}} \mu(d)=f(n) \]

當然還可以用狄利克雷卷積更輕松地證明:

  • 證明:

    給出的條件即 \(g=I*f\)

    證明的為 \(f=\mu*g\)

    因為 \(f*\varepsilon=f=\mu*g\)

    又因為 \(\mu*I=\varepsilon\)

    所以 \(f*\mu*I=\mu*g\)

    同時消去 \(\mu\)\(f*I=g\)

另外一種形式(莫比烏斯反演的倍數形式):

  • 還是兩個函數 \(g(n)\)\(f(n)\)

如果

\[g(n)=\sum_{n|d} f(d) \]

簡單說就是倍數之和。

則:

\[f(n)=\sum_{n|d} \mu(\frac{d}{n}) g(d) \]

下面是照搬 OIwiki 上面的證明:

\[\begin{aligned} &\sum_{n|d}{\mu(\frac{d}{n})f(d)} \\ =& \sum_{k=1}^{+\infty}{\mu(k)f(kn)} = \sum_{k=1}^{+\infty}{\mu(k)\sum_{kn|d}{g(d)}} \\ =& \sum_{n|d}{g(d)\sum_{k|\frac{d}{n}}{\mu(k)}} = \sum_{n|d}{g(d)\epsilon(\frac{d}{n})} \\ =& g(n) \end{aligned} \]


做的一些題目:

「雅禮day2」最大公約數gcd

題目大意:

\(n\) 個正整數 \(x_1…x_n\) ,初始時狀態均為未選。有 \(m\) 個操作,每個操作給定一個編號 \(i\) ,將\(x_i\) 的選取狀態取反。每次操作后,你需要求出選取的數中有多少個互質的無序數對。\(n \leq 10^5 \ \ m\leq 10^5 \ \ x_i\leq10^5\)

做題的初始思路:

每次求完因數過后的 bitset 求並,但是這樣的復雜度肯定是爆炸的。

所以我們只考慮每次插入和刪除所帶來的貢獻:

所以設插入的元素為 \(t\) ,每次帶來的貢獻就是下式:

\[\begin{aligned} & \sum\limits_{i=1}^{n} [\gcd(x_i,t)==1] \\ & =\sum_{i=1}^n \sum\limits_{d|t \ d|x_i} \mu(d) \\ & = \sum\limits_{d|t} \sum\limits_{i=1}^n \mu(d) [\ x_i|t \ ] \end{aligned} \]

察覺到,后面的Sigma實質上就是有當前因子 \(d\)\(a_i\) 的個數,所以每次維護一個因數的集合大小就可以了。

Code


P2257 YY的GCD

P2257 YY的GCD

神犇 YY 虐完數論后給傻× kAc 出了一題
給定 \(N, M\),求 \(1 \leq x \leq N\)\(1 \leq y \leq M\)\(\gcd(x, y)\) 為質數的 \((x, y)\) 有多少對。

直接開始推式子:

題目要求的式子:

\[\sum\limits_{i=1}^n \sum\limits_{j=1}^m\sum [\gcd(i,j)\in prime] \]

\(g(d)\)\(\gcd(i,j)=d\) 的個數,\(f(d)\)\(\gcd(i,j)=d\)\(d\) 的倍數的個數,用式子表示以下就是:

\[g(d)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} [\gcd(i,j)==d] \\ f(d)=\sum\limits_{d|n} g(n)=\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor \]

這個式子就是上面莫比烏斯反演的另一種形式,於是:

\[g(n)=\sum\limits_{n|d} \mu(\frac{d}{n}) f(d) \]

答案要求的式子可以變成:

\[\sum\limits_{p\in prime} g(p)=\sum\limits_{p\in prime} \sum \limits_{p|d} \mu(\frac{d}{p}) f(d)=\sum\limits_{p\in prime}\sum\limits_{p|d}\mu(\frac{d}{p})\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor \]

換一種形式表達上面的式子,也就是枚舉倍數再看質因數:

\[\sum\limits_{d=1}^{\min(n,m)}\sum\limits_{p|d \ p\in prime} \mu (\frac{d}{p}) \lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor=\sum\limits_{d=1}^{\min(n,m)}\lfloor\frac{N}{d}\rfloor\lfloor\frac{M}{d}\rfloor\sum\limits_{p|d \ p\in prime} \mu (\frac{d}{p}) \]

后面的Sigma可以先線性篩處理 \(\mu(i)\) 然后 \(\Theta(n\log\log n)\) 處理和得出(類似埃氏篩)。然后合在一起的Sigma前半部分整除分塊后半部分前綴和統計就好了。

Code

P6810 「MCOI-02」Convex Hull 凸包

計算 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^m d(i)*d(j)*d(\gcd(i,j))\)

首先經典的將枚舉的換為 \(\gcd\) ,式子就變為:

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{i=1}^n\sum\limits_{j=1}^{m} d(i) \ d(j)\ [\gcd(i,j)==d] \]

再將 \(d\) 除出去。

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} d(id) \ d(jd)\ [\gcd(i,j)==1] \]

然后將 \([\gcd(i,j)]\) 代換掉。

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} d(id) \ d(jd) \sum\limits_{t|{\gcd(i,j)}} \mu(t) \]

然后再交換枚舉順序,先枚舉 \(t\)

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{t=1}^{\min(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)}\mu(t)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} d(id) \ d(jd) [t|\gcd(i,j)] \]

右邊可以再除一個 \(t\)

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{t=1}^{\min(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)}\mu(t)\sum\limits_{i=1}^{\lfloor\frac{n}{dt}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{dt}\rfloor} d(idt) \ d(jdt) \]

不妨將 \(dt\) 換成 \(x\)

\[\sum\limits_{d=1}^{\min(n,m)}d(d)\sum\limits_{d|x}^{min(n,m)}\mu(\frac{x}{d})\sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor} d(ix) \ d(jx) \]

可以把 \(d(d)\) 丟進下一個Sigma,在變為枚舉 \(x\)

\[\sum\limits_{x=1}^{\min(n,m)}\sum\limits_{d|x}^{min(n,m)} d(d)\mu(\frac{x}{d})\sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor} d(ix) \ d(jx) \]

因為 \(d*\mu=I\) (這點可以見上面的性質 \(7\))

所以整個式子直接變為:

\[\sum\limits_{x=1}^{\min(n,m)}\sum\limits_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{x}\rfloor} d(ix) \ d(jx) \]

后面的兩個式子可以在線性篩因子個數后 \(\Theta(n)\) 求出。

Code

P1829 [國家集訓隊]Crash的數字表格 / JZPTAB

計算 \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m} {lcm(i,j)}\)

解釋見下文,先直接寫式子:

\[\begin{aligned} &=\sum\limits_{i=1}^n\sum\limits_{j=1}^m \frac{i*j}{\gcd(i,j)} \ \ \ \ \ ① \\ &=\sum\limits_{d=1}^{\min(n,m)} \sum\limits_{i=1}^n \sum\limits_{j=1}^m [\gcd(i,j)==d] \frac{i*j}{d} \ \ \ \ \ ② \\ &=\sum\limits_{d=1}^{\min(n,m)} \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} [\gcd(i,j)==1] \ i*j*d \ \ \ \ \ ③ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} [\gcd(i,j)==1] \ i*j \ \ \ \ \ ④ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} \sum\limits_{k|\gcd(i,j)} \mu(k) \ i*j \ \ \ \ \ ⑤ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{k=1}^{\min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}\mu(k) \ \sum\limits_{i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{d} \rfloor} \ [k|\gcd(i,j)] \ i*j \ \ \ \ \ ⑥ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{k=1}^{\min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}\mu(k) \ \ \sum\limits_{k*i \ i=1}^{\lfloor \frac{n}{d}\rfloor} \sum\limits_{k*j \ j=1}^{\lfloor \frac{m}{d} \rfloor} \ \ i*j*k^2 \ \ \ \ \ ⑦ \\ &=\sum\limits_{d=1}^{\min(n,m)} d \ \sum\limits_{k=1}^{\min(\lfloor \frac{n}{d} \rfloor,\lfloor \frac{m}{d} \rfloor)}\mu(k) \ k^2 \ \sum\limits_{i=1}^{\lfloor \frac{n}{dx}\rfloor} \sum\limits_{j=1}^{\lfloor \frac{m}{dx} \rfloor} \ \ i*j \ \ \ \ \ ⑧ \end{aligned} \]

①:是根據 \(lcm\) 的定義轉換的。

②:交換枚舉順序。

③:將枚舉的 \(\gcd\) 提出,右邊實際上是除的 \(d^2\) 所以要乘一個 \(d\)

④:把 \(d\) 提出去

⑤:將 \([gcd(i,j)==1]\) 用莫反轉換為 $\sum\limits_{k|\gcd(i,j)} \mu(k) $

⑥:在轉換枚舉順序,將 \(k\) 提前。

⑦:讓他們都乘一個 \(k\) ,也就是強制擁有一個 \(k\) 的因數,這樣就可以直接省去一個判斷 \(k|\gcd(i,j)\) 的條件

⑧:將 \(k^2\) 提出,預處理出 \(\mu(k)*k^2\) 的前綴和后二次整除分塊可以求出答案。

復雜度:\(\Theta(n^{\frac{3}{4}})\)

Code

CF900D Unusual Sequences

求解 \(\gcd=x\) 和為 \(y\) 的數列有多少種

首先,當 \(x \nmid y\) 時,是無解的。

所以不妨將當前的所有數都除 \(x\) ,問題也就轉化為了給定和為 \(\frac{y}{x}\) ,所有數的 \(\gcd=1\) 的方案總數。

姑且先不考慮 \(\gcd=1\) 的條件:

\(g(x)\) 為若干個正整數和為 \(x\) 方案數:

用隔板法+二項式反演 很容易得出:$g(x)=\sum\limits_{i=1}^x \dbinom{x-1}{i-1}=\sum\limits_{i=1}^x \dbinom{x-1}{i-1} 1^{i-1} *1{x-i}=2{x-1} $

那么加上 \(\gcd=1\) 的條件。

\(f(x)\) 為若干個數和為 \(x\) ,它們的 \(\gcd=1\) 的方案數。

顯然:\(g(x)=\sum\limits_{d|x} f(d)\) (也就是每一種正整數解都可以由它的最簡形式(即 \(\gcd=1\) 的形式)擴大若干倍轉化過來。

根據莫比烏斯反演的因數形式可以得到:

\(f(x)=\sum\limits_{d|x} \mu(\frac{x}{d}) g(x)\)

這個式子,因為 \(x\)\(10^9\) 級別的,無法用線性篩快速求解 \(\mu\) 函數,那么就直接 \(\sqrt{x}\) 直接定義法求得了,但是時間卡得比較緊,可以再加一個線性篩只用質數,這樣復雜度就是\(\Theta(\frac{\sqrt{x}}{\log x})\)\(g(x)\) 也珂以通過快速冪快速求得。

總體復雜度應該是 \(\Theta(\sqrt{m}*(\frac{\sqrt{m}}{\log m}+\log m))=\Theta(\frac{m}{\log m}+\sqrt{m}\log m)\) CF神機上應該是穩穩跑過得。

Code

(注意 \(\mu(x)\) 為負數時的處理)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM