1. 程式人生 > 其它 >尤拉反演

尤拉反演

引入

你遇到了一道數論題:

\(S=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\gcd(i,j)\) 的值,對 \(19260817\) 取模,\(1\le n\le m\le 10^5\)

“這不是莫比烏斯反演裸題嗎?”

\(\begin{aligned} S&=\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\\ &=\sum_{d=1}^nd\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=d]\\ &=\sum_{d=1}^nd\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}[\gcd(i,j)=1]\\ &=\sum_{d=1}^nd\sum_{i=1}^{n/d}\sum_{j=1}^{m/d}\sum_{t|\gcd(i,j)}\mu(t)\\ &=\sum_{d=1}^nd\sum_{t=1}^{n/d}\mu(t)\sum_{i=1}^{n/d}[t|i]\sum_{j=1}^{m/d}[t|j]\\ &=\sum_{d=1}^nd\sum_{t=1}^{n/d}\mu(t)\left\lfloor\dfrac{n}{dt}\right\rfloor\left\lfloor\dfrac{m}{dt}\right\rfloor \end{aligned}\)

\(T=dt\)

\(\begin{aligned} S&=\sum_{d=1}^nd\sum_{t=1}^{n/d}\mu(t)\left\lfloor\dfrac{n}{dt}\right\rfloor\left\lfloor\dfrac{m}{dt}\right\rfloor\\ &=\sum_{T=1}^n\left\lfloor\dfrac{n}{T}\right\rfloor\left\lfloor\dfrac{m}{T}\right\rfloor\sum_{t\mid T}\mu(t)(T/t)\\ &=\sum_{T=1}^n\left\lfloor\dfrac{n}{T}\right\rfloor\left\lfloor\dfrac{m}{T}\right\rfloor\varphi(T) \end{aligned}\)

至此可以 \(O(n)\) 計算

你有一個朋友,然後你看到了他的做法:

\(\begin{aligned} S&=\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\\ &=\sum_{i=1}^n\sum_{j=1}^m\sum_{d|\gcd(i,j)}\varphi(d)\\ &=\sum_{d=1}^{n}\varphi(d)\sum_{i=1}^n[d|i]\sum_{j=1}^m[d|j]\\ &=\sum_{d=1}^{n}\varphi(d)\left\lfloor\dfrac{n}{d}\right\rfloor\left\lfloor\dfrac{m}{d}\right\rfloor \end{aligned}\)

其中用到了尤拉函式的一條性質:\(\sum\limits_{d\mid n}\varphi(d)=n\)
你看不懂,但大受震撼

朋友告訴你,運用這條性質推式子的過程被稱為尤拉反演

尤拉反演

這東西的核心只有上面那一條性質,適用範圍也比較小(感覺都不應該稱為反演,,實在沒啥應用)
但在某些情況下,用尤拉反演推式子確實會簡單很多

首先給出 \(\sum\limits_{d\mid n}\varphi(d)=n\) 的證明:
首先有 \(\sum\limits_{d\mid n}\sum\limits_{i=1}^n[\gcd(i,n)=d]=n\)
其中的方括號是艾佛森括號

這個式子其實是將 \(1\sim n\) 的所有整數 \(i\)\(\gcd(i,n)\) 的值分類
每個 \(i\) 都只會在 \(d=\gcd(i,n)\) 處產生恰好一次貢獻,故左式的值為 \(n\)

簡單地推一推式子:
\(\begin{aligned} \sum_{d\mid n}\sum_{i=1}^n[\gcd(i,n)=d]=n &\Rightarrow\\ \sum_{d\mid n}\sum_{i=1}^{n/d}[\gcd(i,n/d)=1]=n &\Rightarrow\\ \sum_{d\mid n}\varphi(n/d)=n&\Rightarrow\\ \sum_{d\mid n}\varphi(d)=n& \end{aligned}\)

結論得證

然後你只要會用這個結論就行了

習題

主要是應用於 \(\gcd\) 求和形式的式子,直接把 \(\gcd\) 換成 \(\sum\limits_{d\mid \gcd}\varphi(d)\) ,然後大力推一波即可

LibreOJ #6491. 「XXOI 2018」簡單的最大公約數

洛谷P2257 YY的GCD