莫比烏斯反演 (入門級別) 學習筆記


這文章好水啊。。。

公式:

原始版:

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

推論式:

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

簡單應用:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=x] \]

\(f(x)=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^m[\gcd(i,j)=x]\)\(g(x)=\displaystyle\sum_{x|d}f(d)\).

根據莫比烏斯反演可得:\(f(x)=\displaystyle\sum_{x|d}\mu(\frac{d}{x})g(d)\).

\(g(x)=\displaystyle\sum_{i=1}^n\sum_{j=1}^m[x|\gcd(i,j)]\)

\(=\displaystyle\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{x}\rfloor}[1|\gcd(i,j)]\)

\(={\lfloor\frac{n}{x}\rfloor}\times {\lfloor\frac{m}{x}\rfloor}\)

所以\(f(x)=\displaystyle\sum_{i=1}^{\lfloor\frac{\min(n,m)}{x}\rfloor}\mu(i)g(i\cdot x)=\displaystyle\sum_{i=1}^{\lfloor\frac{\min(n,m)}{x}\rfloor}\mu(i)\times {\lfloor\frac{n}{ix}\rfloor}\times {\lfloor\frac{m}{ix}\rfloor}\)

引理1:\({\lfloor\frac{n}{ab}\rfloor}={\lfloor\frac{\lfloor\frac{n}{a}\rfloor}{b}\rfloor}\).

引理2:設集合\(S=\{{\lfloor\frac{n}{x}\rfloor}|1\leq x\leq n,x\in \mathbb{N}\}\),則\(|S|=O(\sqrt{n})\).

證明都略了

\(f(x)=\displaystyle\sum_{i=1}^{\lfloor\frac{\min(n,m)}{x}\rfloor}\mu(i)\times {\lfloor\frac{\lfloor\frac{n}{x}\rfloor}{i}\rfloor}\times {\lfloor\frac{\lfloor\frac{m}{x}\rfloor}{i}\rfloor}\)

預處理出\(\mu(i)\)的前綴和即可\(O(\sqrt{n})\)回答每次詢問。總復雜度\(O(n+\sqrt{n})\).

例題1:YY的GCD

求:

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

多組測試數據,\(1\leq n,m\leq 10^7,1\leq T\leq 10^4\).


\(\text{原式}=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{p\in prime}[\gcd(i,j)=p]\)

\(=\displaystyle\sum_{p\in prime}\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=p]\)

\(=\displaystyle\sum_{p\in prime}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}[\gcd(i,j)=1]\)

\(f(n,m,x)=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=x]\).

\(g(n,m,x)=\displaystyle\sum_{x|d}f(n,m,d)\).

\(g(n,m,x)=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}[x|\gcd(i,j)]\)

\(=\displaystyle\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{x}\rfloor}[1|\gcd(i,j)]\)

顯然對於任意\(i,j\in\mathbb{N_+}\)\([1|\gcd(i,j)]\)成立,所以\(g(n,m,x)={\lfloor\frac{n}{x}\rfloor}{\lfloor\frac{m}{x}\rfloor}\).

所以\(f(n,m,x)=\displaystyle\sum_{x|d}\mu(\frac{d}{x})g(n,m,d)\)

則我們要求的是\(\displaystyle\sum_{p\in prime}f(\lfloor\frac{n}{p}\rfloor,\lfloor\frac{m}{p}\rfloor,1)\)

\(=\displaystyle\sum_{p\in prime}\sum_{d=1}^{n}\mu(d)\lfloor\frac{n}{dp}\rfloor\lfloor\frac{m}{dp}\rfloor\)

這個\(dp\)比較丑,我們把它換成\(i\),得到

\(\displaystyle\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor\sum_{p\in prime,p|i}\mu(\frac{i}{p})\).

后面\(\displaystyle\sum_{p\in prime,p|i}\mu(\frac{i}{p})\)我們是可以提前預處理出來的,這樣用整除分塊就可以\(O(\sqrt{n})\)回答每次詢問了。

參考代碼

例題2:[SDOI2015]約數個數和

定義\(d(x)\)\(x\)的約數個數。

求:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}d(ij) \]

多組測試數據,\(1\leq n,m,T\leq 5\times 10^4\).


初步轉化:

\[d(ij)=\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1] \]

證明:設\(ij=\displaystyle\prod_{t} p_t^{e_t}\),對於任意一個\(p_t\),設\(i\)\(e_t\)的貢獻為\(a\)\(j\)\(e_t\)的貢獻為\(b\),即\(a+b=e_t\)。對於一個\(ij\)的一個約數\(w\):如果\(w\)\(p_t\)的次數\(c\leq a\),我們在\(i\)里計算它;否則,我們在\(j\)里計算\(c-a\)。即:\(x\)里一個\(p^c\)表示當前\(ij\)的這個因數里有\(p^c\)\(y\)里一個\(p^c\)表示當前\(ij\)的這個因數里有\(p^{c+a}\)。這樣只要\(x,y\)互質,就保證了不重不漏的計數。

接下來我們就可以快樂地推式子了。

原式\(=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1]\)

交換和式:

\(=\displaystyle\sum_{x=1}^{n}\sum_{y=1}^{m}\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{y}\rfloor}[\gcd(x,y)=1]\)

\(=\displaystyle\sum_{x=1}^{n}\sum_{y=1}^{m}{\lfloor\frac{n}{x}\rfloor}{\lfloor\frac{n}{y}\rfloor}[\gcd(x,y)=1]\)

開始反演。(把\(x,y\)換成\(i,j\)使式子更好看一點)

\(g(x)=\displaystyle\sum_{x|d}f(d)\)

\(=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor[x|\gcd(i,j)]\)

\(=\displaystyle\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{x}\rfloor}\lfloor\frac{n}{xi}\rfloor\lfloor\frac{m}{xi}\rfloor\)

代回去:\(f(x)=\displaystyle\sum_{x|d}\mu(\frac{d}{x})g(d)\)

我們要求的其實是:\(f(1)=\displaystyle\sum_{i=1}^{n}\mu(i)g(i)\).

我們在\(O(n\sqrt{n})\)的時間內,枚舉每個\(x\)並預處理出\(s(x)=\displaystyle\sum_{i=1}^{x}\lfloor\frac{x}{i}\rfloor\)的值。

則答案就是\(f(1)=\displaystyle\sum_{i=1}^{n}\mu(i)s(\lfloor\frac{n}{i}\rfloor)s(\lfloor\frac{m}{i}\rfloor)\),預處理出\(\mu\)的前綴和即可用整除分塊\(O(\sqrt{n})\)回答詢問。

參考代碼

例題3:bzoj2693 jzptab

求:

\[\sum_{i=1}^{n}\sum_{j=1}^{m}\operatorname{lcm}(i,j) \]

多組測試數據,\(1\leq n,m\leq 10^7,1\leq T\leq 10^4\).


這題有個弱化版,沒有多測。我們從這里講起。

原式\(=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\frac{ij}{\gcd(i,j)}\)

\(=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}\sum_{k=1}^{\min(n,m)}\frac{ij}{k}[\gcd(i,j)=k]\)

\(=\displaystyle\sum_{k=1}^{\min(n,m)}\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}ijk[\gcd(i,j)=1]\)

\(=\displaystyle\sum_{k=1}^{\min(n,m)}k\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}ij[\gcd(i,j)=1]\)

套用莫比烏斯反演。

\(f(n,m,x)=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}ij[\gcd(i,j)=x]\).

\(g(n,m,x)=\displaystyle\sum_{x|d}f(n,m,d)\).

\(g(n,m,x)=\displaystyle\sum_{i=1}^{n}\sum_{j=1}^{m}ij[x|\gcd(i,j)]\)

\(=x^2\displaystyle\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{x}\rfloor}ij[1|\gcd(i,j)]\)

\(=x^2\displaystyle\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{x}\rfloor}ij\)

\(i\)提到前面,得到:

\(=x^2\displaystyle\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}i\sum_{j=1}^{\lfloor\frac{m}{x}\rfloor}j\)

等差數列求和:

\(=x^2\displaystyle\sum_{i=1}^{\lfloor\frac{n}{x}\rfloor}i\frac{{\lfloor\frac{m}{x}\rfloor}\times ({\lfloor\frac{m}{x}\rfloor}+1)}{2}\)

\(=x^2\frac{{\lfloor\frac{n}{x}\rfloor}\times ({\lfloor\frac{n}{x}\rfloor}+1)}{2}\cdot\frac{{\lfloor\frac{m}{x}\rfloor}\times ({\lfloor\frac{m}{x}\rfloor}+1)}{2}\)

代回去得到:

\(f(n,m,x)=\displaystyle\sum_{x|d}\mu(\frac{d}{x})g(n,m,d)\)

\(f(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor,1)=\displaystyle\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\mu(i)\cdot i^2\cdot \frac{{\lfloor\frac{n}{ki}\rfloor}\times ({\lfloor\frac{n}{ki}\rfloor}+1)}{2}\cdot\frac{{\lfloor\frac{m}{ki}\rfloor}\times ({\lfloor\frac{m}{ki}\rfloor}+1)}{2}\)

於是我們就可以\(O(\sqrt{n})\)計算\(f(n,m,k)\).

所以,原式\(=\displaystyle\sum_{k=1}^{n}k\times f(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor,1)\),就可以在\(O(\sqrt{n})\times O(\sqrt{n})=O(n)\)的時間內算出了。

參考代碼


然后來看bzoj這個題。因為要多測,我們\(O(n)\)的復雜度不夠優秀。

為了方便,我們設\(S(i,j)=\sum_{i=1}^{n}\sum_{j=1}^{m}ij\).

則原式\(=\displaystyle\sum_{k=1}^{n}k\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\mu(i)\cdot i^2\cdot S(\lfloor\frac{n}{ki}\rfloor,\lfloor\frac{m}{ki}\rfloor)\).

\(T=ki\),把\(S(\lfloor\frac{n}{ki}\rfloor,\lfloor\frac{m}{ki}\rfloor)\)提前,可得:

\(\displaystyle\sum_{T=1}^{n}S(\lfloor\frac{n}{T}\rfloor,\lfloor\frac{m}{T}\rfloor)\sum_{i|T}\mu(i)\cdot i^2\cdot\frac{T}{i}\)

\(=\displaystyle\sum_{T=1}^{n}S(\lfloor\frac{n}{T}\rfloor,\lfloor\frac{m}{T}\rfloor)\sum_{i|T}\mu(i)\cdot i\cdot T\)

后面的部分\(f(T)=\displaystyle\sum_{i|T}\mu(i)\cdot i\cdot T\)顯然是一個積性函數,所以我們考慮用線性篩將它預處理出來。

  • \(n=1\)時,顯然有\(f(n)=1\)

  • \(n\)為素數時,顯然有\(f(n)=n-n^2\)

  • \(n\)為合數時,設\(n=i\cdot p_j\)\(p_j\)是質數)。如果\(p_j|i\),那么\(\mu(i\cdot p_j)\)一定為\(0\),也就是說沒有新增項。因此\(f(i\cdot p_j)\)相較於\(f(i)\)而言只是每項中的\(T\)變了,所以\(f(n)=f(i)\cdot p_j\)

預處理出\(f\)的前綴和后我們就可以\(O(\sqrt{n})\)回答每次詢問了。

參考代碼


免責聲明!

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



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