杜教筛

杜教筛

前置知识:狄利克雷卷积,数论函数。

应用:主要用于求积性函数的前缀和。

注意和线性筛的区别,线性筛关注于求出积性函数每一项的值,而杜教筛着重于求取前缀和,而不关注每一项具体的值。

先放出模板题:\(\to LuoGu:\) P4213[模板]杜教筛

推导

假设已知一个狄利克雷卷积式子 \(A\ast B=C\),求 \(A\) 的前缀和。即 \(\sum_{i=1}^{n}A(i)\) ,记为 \(S(n)\)

其中 \(A\)\(B\) 为积性函数,根据积性函数的性质可知 \(C\) 也为积性函数。

写开卷积式,得:

\[\begin{aligned} \displaystyle \sum_{i=1}^{n}{C(i)}&=\sum_{i=1}^{n}{\sum_{d\mid i}{B(d)A(\frac{i}{d})}}\\ &=\sum_{d=1}^{n}{{\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}}{B(d)A(\frac{i}{d})}}\\ &=\sum_{d=1}^{n}{B(d)\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}{A(\frac{i}{d})}}\\ &=\sum_{d=1}^{n}{B(d)S(\lfloor\frac{n}{d}\rfloor)} \end{aligned} \]

注意到 \(d=1\) 时出现了 \(S(n)\)

\(S(n)\) 移项可得 \(B(1)S(n)=\sum_{i=1}^{n}{C(i)}-\sum_{d=2}^{n}{B(d)S(\lfloor\frac{n}{d}\rfloor)}\)

由于 \(B(1)=1\),整理得 \(S(n)=\sum_{i=1}^{n}{C(i)}-\sum_{d=2}^{n}{B(d)S(\lfloor\frac{n}{d}\rfloor)}\)(这个式子就是杜教筛的套路式)

据证明:直接由上式递归 \(+\) 整除分块求 \(S(n)\) 的复杂度为 \(O(n^{\frac{3}{4}})\)

但如果用线性筛预处理到 \(S(T)\),这个复杂度将更为优秀,达到 \(O(n^{\frac{2}{3}})\)。可以证得在 \(T=n^{\frac{2}{3}}\) 时,能取得最优复杂度。

适用条件:
\(\sum_{i=1}^{n}{C(i)}\)\(C\) 的前缀和应很好求。

\(\mu \ast I=e\),欲求 \(\mu\) 的前缀和,则 \(e\) 的前缀和应该很好求。

很显然 \(e\) 的前缀和 \(\sum_{i=1}^{n}{e(i)}=1\)

练习题

现在来回看模板题

\(\to LuoGu:\) P4213[模板]杜教筛

要求欧拉函数 \(\varphi\) 和 莫比乌斯函数 \(\mu\) 的前缀和。

先考虑求 \(\mu\) 的前缀和。
根据卷积形式:\(\mu \ast I=e\),且 \(e,T,\mu\) 均为积性函数。
那么 \(\displaystyle S_{\mu}{(n)}=\sum_{i=1}^{n}{e(i)}-\sum_{d=2}^{n}{I(d)S_{\mu}{({\lfloor\frac{n}{d}\rfloor})}}\)

整理得 \(\displaystyle S_{\mu}{(n)}=1-\sum_{d=2}^{n}{S_{\mu}{(\lfloor\frac{n}{d}\rfloor)}}\)

然后就可以愉快地递归了。

\(\varphi\) 的前缀和同理:

\(\varphi\ast I=id\) 可知:

\(\displaystyle S_{\varphi}{(n)}=\frac{n\times (n+1)}{2}-\sum_{d=2}^{n}{S_{\varphi}{(\lfloor\frac{n}{d}\rfloor)}}\)

杜教筛的基础板块就暂时到这里了,可能以后会写杜教筛更具体的应用吧。

posted @ 2022-07-23 23:32  mklzc  阅读(61)  评论(0编辑  收藏  举报