这篇文章讲的是一种筛法,我个人将它称之为Min_25筛。
它可以用来求积性函数$F(x)$的前缀和,条件与洲阁筛一样,可以快速地对一段质数的F求和。
它可以替代洲阁筛,而且空间常数、时间常数、代码复杂度远比洲阁筛优秀,甚至可以与杜教筛相媲美
时间复杂度大约与洲阁筛相同。
参考链接:
https://post.icpc-camp.org/d/782-spoj-divcnt3/2
https://loj.ac/submission/56015
首先我们先考虑洲阁筛里面干了什么,首先我们需要对每一个$x=\lfloor n/i \rfloor$,求出$\sum_{i=1}^x [i是质数] i^k$。
还是类似洲阁筛,我们考虑每一个$\leq \sqrt{n}$的质数p,对每个x维护$A(x)=\sum_{i=1}^x [i是质数或i的每个质因子都>p] i^k$。
我们考虑从大到小更新,我们发现我们要做的事情实际上是对于每个$x \geq p^2$,令$A(x)-=(A(x/p)-A(p))*p^k$。直接暴力更新。这个部分和洲阁筛复杂度是一样的,也是$O(\frac{n^{\frac{3}{4}}}{\log(n)})$的。
接下来考虑如何对函数求和,我们可以十分暴力地求和。我们定义S(n,x)表示对于2到n的,每个质因子都$\geq x$的数的F之和。
我们先对质数的F求和,这个用预处理好的A就行。
否则我们从x开始枚举数的最小质因子p,如果$p^2>n$那么break,否则的话我们枚举一个满足$p^{e+1} \leq n$的正整数e,把$S(n/p^e,p的下一个质数)F(p^e)+F(p^{e+1})$计入答案。
这部分的复杂度我不会分析,不过我觉得应该和洲阁筛差别也不大。