這文章好水啊。。。
公式:
原始版:
推論式:
簡單應用:
設\(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
求:
多組測試數據,\(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\)的約數個數。
求:
多組測試數據,\(1\leq n,m,T\leq 5\times 10^4\).
初步轉化:
證明:設\(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
求:
多組測試數據,\(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})\)回答每次詢問了。
