杜教筛
杜教筛
前置知识:狄利克雷卷积,数论函数。
应用:主要用于求积性函数的前缀和。
注意和线性筛的区别,线性筛关注于求出积性函数每一项的值,而杜教筛着重于求取前缀和,而不关注每一项具体的值。
先放出模板题:\(\to LuoGu:\) P4213[模板]杜教筛
推导
假设已知一个狄利克雷卷积式子 \(A\ast B=C\),求 \(A\) 的前缀和。即 \(\sum_{i=1}^{n}A(i)\) ,记为 \(S(n)\)。
其中 \(A\) 和 \(B\) 为积性函数,根据积性函数的性质可知 \(C\) 也为积性函数。
写开卷积式,得:
注意到 \(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)}}\)
杜教筛的基础板块就暂时到这里了,可能以后会写杜教筛更具体的应用吧。