这一篇$\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$
而后就作完了。
接下来还有贝尔级数等一些鬼畜的高级玩意,直接给连接算了。