杜教筛

杜教筛

简介

杜教筛是一种亚线性的数论函数前缀和算法,它利用狄利克雷卷积构造递推式,配合整除分块与记忆化搜索,可做到 \(O(n^{2/3})\) 的时间复杂度。

其核心思想是构造两个辅助函数 \(g,h\),满足 \(h=f*g\),且 \(h,g\) 的前缀和容易计算,从而通过卷积恒等式推导出 \(\sum f_i\) 的递推式,递归求解。

推导

  1. 卷积前缀和

\(h\) 求前缀和 \(H(n)\)

\[H(n) = \sum_{i=1}^n \sum_{d|i} f(d) \cdot g(\frac{i}{d}) \]

  1. 交换求和顺序(记 \(F(i) = \sum f_i\)

\[H(n) = \sum_{d=1}^n g(d) \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor} f(k) \\ = \sum_{d=1}^n g(d) \cdot F(\lfloor \frac{n}{d} \rfloor) \]

  1. 得到递推式

提出 \(d=1\)

\[H(n) = g(1) \cdot F(n) + \sum_{d=2}^n g(d) \cdot F(\lfloor \frac{n}{d} \rfloor) \\ \Downarrow \\ g(1) \cdot F(n) = H(n) - \sum_{d=2}^n g(d) \cdot F(\lfloor \frac{n}{d} \rfloor) \]

\(g\) 是积性函数(一般而言如此),则 \(g(1)=1\),故我们得到了 \(F(n)\) 的递推式。

例题选讲

  • P6055 [RC-02] GCD(双射思想证明等式

\[\sum_{i=1}^N\sum_{j=1}^N\sum_{p=1}^{\lfloor\frac{N}{j}\rfloor}\sum_{q=1}^{\lfloor\frac{N}{j}\rfloor}[\gcd(i,j)=1][\gcd(p,q)=1] \\ = \sum_{i=1}^N \sum_{j=1}^N \sum_{p=1}^{N} \sum_{q=1}^N [\gcd(i,j)=1][\gcd(p,q)=j] \\ = \sum_{i=1}^N \sum_{p=1}^N \sum_{q=1}^N [\gcd(i,\gcd(p,q))=1] \\ = \sum_{i=1}^N \sum_{p=1}^N \sum_{q=1}^N [\gcd(i,p,q)=1] \\ = \sum_{i=1}^N \sum_{p=1}^N \sum_{q=1}^N \sum_{d \mid \gcd(i,p,q)} \mu(d) \\ = \sum_{d=1}^N \mu(d) \lfloor \frac{N}{d} \rfloor ^3 \]

整除分块 + 杜教筛即可。

  • P3768 简单的数学题(消元构造法

\[\left(\sum_{i=1}^n\sum_{j=1}^n ij \gcd(i,j)\right) \bmod p \\ = \left(\sum_{i=1}^n\sum_{j=1}^n ij \sum_{d \mid \gcd(i,j)} \varphi(d) \right) \bmod p \\ = \left(\sum_{d=1}^n d^2 \varphi(d) \left( {\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} i} \right)^2 \right) \bmod p \\ = \left(\sum_{d=1}^n d^2 \varphi(d) \sum_{i=1}^{\lfloor \frac{n}{d} \rfloor} i^3 \right) \bmod p \\ \]

后面这个东西是立方和公式 \(\sum_{i=1}^{n} i^3 = (\frac{n+1}{2})^2\),这也解释了它为啥等于 \((\sum_{i=1}^n i)^2\)

前面这个呢我们考虑杜教筛处理。看到 \(d^2\),考虑构造 \(g(n)=n^2\),然后代入 \(\frac{n}{d}\),这样就能消掉 \(d^2\) 啦:

\[\sum_{d \mid n} d^2 \varphi(d) g(\frac{n}{d}) \\ = n^2 \sum_{d \mid n} \varphi(d) \\ = n^3 \]

这表明 \(H(n)=n^3\),而 \(g(n)=n^2\),直接代入杜教筛公式求解即可。


总结一下这一篇的恒等式:

\[(\sum_{i=1}^n i)^2 = \sum_{i=1}^{n} i^3 = (\frac{n+1}{2})^2 \\ \sum_{i=1}^n i^2 = \frac{n(n+1)(2n+1)}{6} \\ \sum_{k=1}^N \sum_{i=1}^{\lfloor \frac{N}{k} \rfloor} \sum_{j=1}^{\lfloor \frac{N}{k} \rfloor} [\gcd(i,j) = k] = N^2 \]

第三个证明

完结撒花!

posted @ 2026-08-06 22:55  _KidA  阅读(8)  评论(0)    收藏  举报