「学习笔记」洲阁筛
前言
Q: min_25筛外面套一个数论分块复杂度是多少的啊QwQ
A:
复杂度不变啊
如果你要在 min25 外面套一个数论分块
说明你根本没有掌握 min25 筛吧
很久很久以前,我非常 naive 地认为只要会 min_25 筛就可以了,洲阁筛这种东西根本不要学,直到碰到了这题。
很显然是一个数论分块里面套一个 min_25 筛,但是非常难受的是这玩意看着复杂度就很不对而且确实慢出天际,于是就有了这篇 blog。
前置姿势
用途和限制
和 min_25 筛限制完全一样(如果有不同之处敬请指正),可以支持在 \(\mathcal O\left(\frac {n ^ \frac 34} {\log n}\right)\) 的时间复杂度内对所有 \(\lfloor \frac nd \rfloor\) 求出 \(\sum_{i=1}^{\lfloor \frac nd \rfloor} \mathbf f(i)\),在求单点时常数比 min_25 筛更大。
算法流程
Part I
和 min_25 筛的第一部分完全一样,所以本文沿用 min_25 筛中 \(\mathbf g(n, i)\) 的定义。
Part II
设 \(\mathbf S(n, j) = \sum_{i=1}^n [\mathrm{minp}(i) \geq \mathbf P_j \or i \in \mathbf P]\ \mathbf f(i)\),那么有 \(\mathbf S(n, |\mathbf P| + 1) = \mathbf g(n, |\mathbf P|)\)。
转移就是枚举 \(\mathbf P_j\) 的次数:
\[\mathbf S(n, j) = \mathbf S(n, j + 1) + \sum_{\mathbf P_j^{e + 1} \leq n} \mathbf f(\mathbf P_j^e) \left(\mathbf S\left( \frac n {\mathbf P_j^e}, j + 1 \right) - \mathbf g(\mathbf P_j, |\mathbf P|)\right) + \mathbf f(\mathbf P_j^{e + 1})
\]
可以发现能够使用滚动数组优化。