杜教筛学习笔记

给出问题:求 \(\sum^{n}_{i=1}f(i)\) 其中 \(f\) 是一个积性函数。

\(S(n)=\sum^{n}_{i=1}f(i)\) ,再找一个积性函数 \(g\) ,考虑 \(f*g\)

\[\begin{align} &\sum^{n}_{i=1}(f*g)(i)\\ =&\sum ^n_{i=1}\sum_{d|i}f(d)g(\frac{i}{d})\\ =&\sum ^{n}_{d=1}g(d)\sum^{\lfloor \frac{n}{d}\rfloor }_{i=1} f(i)\\ =&\sum ^n_{d=1}g(d)S(\lfloor \frac{n}{d} \rfloor ) \end{align} \]

所以可以得出一下式子:

\[g(1)S(n)=\sum^{n}_{i=1} (g*f)(i)+\sum ^{n}_{i=2}g(i)S(\lfloor \frac{n}{i} \rfloor ) \]

整除分块做即可,时间复杂度为 \(O(n^{\frac{3}{4}})\),证明是用微积分证的。

考虑类似与根号分治的思想,先求出前 \(m\) 个的答案,超过的再用杜教筛,算过的用哈希表记忆化。当 \(m=n^{\frac{2}{3}}\) 时候最优,为 \(O(n^\frac{2}{3})\)


常见杜教筛式子:

\[S_{\mu }(n)=1-\sum ^{n}_{i=2}S_{\mu}(\lfloor \frac{n}{i} \rfloor ) \]

\[S_{\varphi }(n)=\frac{n(n+1)}{2} -\sum ^{n}_{i=2}S_{\varphi}(\lfloor \frac{n}{i} \rfloor ) \]

posted @ 2025-05-13 12:03  __sin  阅读(16)  评论(0)    收藏  举报