這一篇$\texttt{blog}$應該算這篇的後續,因此能夠先看一下這一篇QwQhtml
$\begin{aligned}1. ; & \textbf{1}(x) = 1 \2. ; & \textbf{id}(x) = x, \textbf{id}^k(x) = x ^ k \3. ; & \textbf{d}(x) = \sum_{d \mid x} 1 \4. ; & \sigma(x) = \sum_{d\mid x} d\ 5. ; & \epsilon(x) = [x = 1]\end{aligned}$函數
若$\textbf{h} = \textbf{f} * \textbf{g}$,那麼: $$ \textbf{h}(x) = \sum_{d\mid x} \textbf{f}(d)\textbf{g}(\frac nd) $$ 到這裏咱們能夠推出一些奇奇怪怪的數論函數關係式:spa
$\begin{aligned}1.;& \textbf{d} = \textbf 1 * \textbf 1\ 2.; & \sigma = \textbf 1 * \textbf{id} \ 3. ; & \textbf{id} = \textbf 1 * \varphi \ 4. ; & \sigma = \textbf 1 * \textbf 1 * \varphi = \textbf d * \varphi \end{aligned}$htm
其中第四個是亂搞的(逃blog
設$\mu * \textbf 1 = \epsilon$,那麼設$\textbf f = \textbf 1 * \textbf g$,則$\textbf g = \mu * \textbf f$遞歸
而後沒了get
到這裏咱們又能夠推出一些奇奇怪怪的數論函數關係式:博客
$\begin{aligned} 1. ; & \varphi = \textbf{id} * \mu \ 2. ; & \textbf 1 = \mu * \textbf d \ 3. ; & \textbf{id} = \sigma * \mu \end{aligned}$數學
後面兩個都是亂搞的(逃模板
說不定後面兩個在杜教篩$\textbf d$和$\sigma$的時候有用(霧
前人研究了一下$\mu$,發現這不只牽涉到數論函數的關係,還發現它是一種特殊的容斥係數。這個特性等下再講,先看一看$\mu$的其它的性質。
咱們研究一下$\mu$在$p^k$處的取值($p$是質數) $$ \mu(n) = \begin{cases} 1 & k = 0 \ -1 & k = 1 \ 0 & k > 1 \end{cases} $$ 因而就能夠很是好的線性篩了。
至於$\mu$如何用容斥的方法理解,不想寫了能夠看yyb的博客
作題?題目通常會給出求$\sum_{i=1}^n\sum_{j=1}^m \textbf f(\gcd(i, j))$
而後套路就是能夠變成$\sum_{i=1}^n \sum_{j=1}^m \sum_{d | i, d | j} \textbf g(d), \textbf g = \textbf f * \mu$
接下來提出$d$就能夠亂搞了。
給道例題,就寫一道以前那篇文章寫的有一點不徹底的題目吧。
給定$n, m, (n \leq m)$求$\sum_{i=1}^n\sum_{j=1}^m \sigma(\gcd(i, j))$
$\because \textbf f = \sigma,\therefore \textbf g = \mu * \sigma$
以前的g就止步於此
經過這篇文章的推導,咱們翻上面的式子發現$\mu * \sigma = \textbf{id}$,因而$\textbf g = \textbf{id}$
Wow!
那麼能夠推出: $$ \begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m \sigma(\gcd(i,j)) \ =& \sum_{i=1}^n\sum_{j=1}^m\sum_{d|i, d|j} d \ =& \sum_{d=1}^nd\sum_{d|i}^n\sum_{d|j}^m 1 \ =& \sum_{d=1}^n d\left\lfloor\frac nd\right\rfloor\left\lfloor\frac md\right\rfloor \end{aligned} $$ 寫個鬼的線性篩,直接算不就能夠了QwQ
用來求積性函數前綴和。即求$\textbf S(n) = \sum_{i=1}^n \textbf f(i)$
假設咱們找到了一個有趣的函數$\textbf g$,使得$\textbf g$和$\textbf f * \textbf g$的前綴和均可以快速求,那麼咱們能夠快速求解$\textbf S(n)$了 $$ \begin{aligned} \because \sum_{i=1}^n (\textbf f * \textbf g)(i) &= \sum_{i=1}^n\sum_{d\mid i} \textbf f(d) \textbf g(\frac nd) \ &= \sum_{d=1}^n \textbf g(d) \sum_{i=1}^{\frac nd} \textbf f(i) \ &= \sum_{i=1}^n \textbf g(i) \textbf S(\frac ni) \end{aligned} $$ 那麼$\textbf g(1)\textbf S(n) = \sum_{i=1}^n (\textbf f * \textbf g)(i) - \sum_{i=2}^n \textbf g(i) \textbf S(\frac ni)$
前一半能夠快速求,後一半能夠數論分塊$+$遞歸求。
複雜度?$\mathrm{O}(n ^ {\frac 23})$或者$\mathrm{O}(n ^ \frac 34)$,這取決於你的實現方式。
而後對於$\sum_{i=1}^n (\textbf f * \textbf g)(i)$要多快速求呢?首先若是能夠$\mathrm{O}(1)$算是墜好的,而後咱們發現後面要$\mathrm{O}(\sqrt n)$的計算,因此這個柿子在$\mathrm{O}(\sqrt n)$的時間複雜度內解決也是沒有問題的。
同時這個玩意每次算的值都是一個$\left\lfloor\frac nx\right\rfloor$,因此求$\sum_{i=1}^n (\textbf f * \textbf g)(i)$能夠套一個杜教篩。
同理$\sum_{i=1}^n \textbf g(i)$也能夠套一層杜教篩,複雜度不會改變。
杜教篩的套路和莫比烏斯反演很像,都須要對狄利克雷卷積有深入的理解和熟練的背誦。
莫比烏斯反演須要找到一個函數$\textbf g = \textbf f * \mu$,杜教篩則是須要找到一個函數$\textbf g$使得$\sum \textbf g(i)$和$\sum (\textbf f * \textbf g)(i)$能夠快速計算。
因此上面的那些奇奇怪怪的數論函數關係式要記住。
舉個例子吧,求$\sum_{i=1}^n \varphi(i)$
找到一個函數$\textbf g$使得$\varphi * \textbf g$能夠快速算。
這個時候咱們翻一下上面的式子能夠發現$\varphi * \textbf 1 = \textbf{id}$,而後$\sum \textbf{id}(i)$能夠快速求,因而就作完了。
蛤?你說這個例子太簡單?那就用一道題目來仔細講一下這個套路吧。
洛谷P4213 【模板】杜教篩(Sum)
簡單寫一下題面,求: $$ \sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j), n \leq 10^{10} $$ 化式子(這裏若是有沒看懂的,趕快回去複習一下): $$ \begin{aligned} &\sum_{i=1}^n\sum_{j=1}^n ij\gcd(i,j) \ =& \sum_{i=1}^n\sum_{j=1}^nij\sum_{d|i, d|j} \varphi(d) \ =& \sum_{d=1}^n\varphi(d)\sum_{d|i}i\sum_{d|j}j \ =& \sum_{d=1}^n d^2 \varphi(d) S\left(\left\lfloor\frac nd\right\rfloor\right)^2 \end{aligned} $$ 其中$S(x) = \sum_{i=1}^x i$。
而後根據以前的套路,咱們數論分塊,問題轉化爲如何快速求$d^2\varphi(d)$的前綴和。
首先經過以前杜教篩能夠再套杜教篩的理論,這裏即便有一個數論分塊,複雜度仍是$\mathrm{O}(n^\frac 23)$,因而複雜度是對的,能夠放心篩。
接下來考慮對於$\textbf f(x) = x^2\varphi(x)$,怎麼找到一個合適的函數$\textbf g$使得$\textbf f * \textbf g$好算。
定義點積$(\textbf f\cdot\textbf g)(i) = \textbf f(i) \textbf g(i)$,那麼咱們能夠獲得一個定理:
若$\textbf f$爲徹底積性函數,$\textbf g, \textbf h$是數論函數,那麼$(\textbf f \cdot \textbf g) * (\textbf f \cdot \textbf h) = \textbf f \cdot(\textbf g * \textbf h)$
證實的話顯然。這個定理不就是給咱們作題用的嗎(逃
因而對於$\textbf f = \textbf{id}^2 \cdot \varphi$,能夠找到$\textbf g = \textbf{id}^2 \cdot \textbf 1$,那麼$\textbf f * \textbf g = \textbf{id}^3, \textbf g = \textbf{id}^2$
而後就作完了。
接下來還有貝爾級數等一些鬼畜的高級玩意,直接給連接算了。