「總結」狄利克雷卷積,莫比烏斯反演和杜教篩

這一篇$\texttt{blog}$應該算這篇的後續,因此能夠先看一下這一篇QwQhtml

0. 一些奇奇怪怪的數論函數

$\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}$函數

1. 狄利克雷卷積

若$\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

2. 莫比烏斯反演

設$\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

3. 杜教篩

用來求積性函數前綴和。即求$\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)

洛谷P3768 簡單的數學題

簡單寫一下題面,求: $$ \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$

而後就作完了。

接下來還有貝爾級數等一些鬼畜的高級玩意,直接給連接算了。

相關文章
相關標籤/搜索