min25 筛和洲阁筛

你说这些我也不明白啊

1. \(F_k\) 函数

现在假设要求积性函数 \(f(x)\) 的前缀和,我们设 \(minp(x)\) 函数代表 \(x\) 的最小质因子是第几个质数,设 \(F_k(x)\) 函数表示在 \([2,x]\)\(minp(i)\geq k\)\(f(i)\) 的和。

这样,我们需要求的前缀和即为 \(F_1(n)+1\) 。考虑递归求解 \(F_k(x)\) 函数。

对于 \(F_k(x)\) ,只考虑 \(F_k(x)\) 所求的范围中的数。将最小因子 \(p_i\) 的影响全部去掉,枚举 \(p_i\) 对应的次数 \(c\) ,则 \([1,x]\) 当中所有 \(minp(x)=p^i\) 且唯一分解中 \(p_k\) 的次数恰好等于 \(c\) 的数的贡献都可以分离出一个 \(f(p_k^c)\) 。对于还有因数的数,接着递归求解。则有

\[F_k(x)=\sum_{i\geq k}\sum_{c\geq 1}[p_i^c\leq x]f(p_i^c)(1+F_{i+1}(x/p_i^c)) \]

发现这样会直接死循环,发现当 \(p_i^c\leq x<p_i^{c+1}\) 的时候,考虑贡献的数中不存在仍含有比 \(p_i\) 大的因数,不递归。

\[\begin{aligned} F_k(x)&=\sum_{i\geq k}\begin{pmatrix}f(p_i)+\sum_{c\geq 1}[p_i^{c+1}\leq x]f(p_i^c)F_{i+1}(x/p_i^c)+f(p_i^{c+1})\end{pmatrix}\\ &=\sum_{i=k}^{p_i\leq x}f(p_i)+\sum_{i\geq k}\sum_{c\geq 1}[p_i^{c+1}\leq x]f(p_i^c)F_{i+1}(x/p_i^c)+f(p_i^{c+1})\\ &=F_p(x)-F_p(p_{k-1})+\sum_{i\geq k}\sum_{c\geq 1}[p_i^{c+1}\leq x]f(p_i^c)F_{i+1}(x/p_i^c)+f(p_i^{c+1})\\ \end{aligned}\]

里面 \(F_p(x)\) 就是 \([1,x]\) 中质数的函数值的和。然后它就不死循环了,不过需要预处理一个 \(F_p(x)\)

2.\(F_p\) 函数

\(F_p(x)\) 表示 \(\sum_{i=1}^{p_i\leq x} f(p_i)\) ,这个时候 \(f(p_i)\) 不好转移,但因为 \(p_i\) 是质数,所以大多数情况下是一个很低次的多项式(如欧拉函数 \(\varphi(p_i)=p_i -1\) ),将每一项分开考虑,则只需要求 \(\sum_{i=1}^{p_i\leq x} p_i^t\) ,其中 \(t\) 为常数。

\(G_k(x)=\sum_{i=1}^x i^t [i\in P||minp(i)>p_k]\) ,即为埃氏筛进行到 \(p_k\) 之后剩下的数,则 \(F_p(x)=G_{|P|}(x)\) ,其中 \(P\) 为筛到 \(\sqrt n\) 的素数,因为埃氏筛只筛到 \(\sqrt n\) 即可。

对于 \(n<p_k^2\) ,则筛之后没有效果,\(G_k(x)=G_{k-1}(x)\)

否则,将所有有 \(p_k\) 为质因数的数删掉,由于 \(p_k^t\) 也是积性函数,所以 \(-p_k^tG_{k-1}(n/p_k)\) ,表示还没被上一轮加过的数们在去掉这个质因数后剩下的因数,但是上一轮加过的质数同样不能再加,于是再 \(+p_k^tG_{k-1}(p_{k-1})\) 表示上一轮已经筛出的质数。得到递推式

\[G_k(x)=G_{k-1}(x)+[p_k^2\leq x]p_k^t(G_{k-1}(p_{k-1})-G_{k-1}(n/p_k)) \]

边界为 \(k=0\) ,用数学归纳法 \(O(1)\) 求自然数幂和就行。

3.复杂度

我会复杂度分析吗时间反正能跑 \(1e13\) 就行了。

具体实现的时候做 \(F_k(x)\) 函数不需要所有的 \(F_p(x)\) 。分别考虑递归式里的两种情况。

首先是 \(F_p(p_{k-1})\) ,因为求 \(F_k(x)\) 相当于一个质因数分解的过程,除了最后可能剩下一个 \(>\sqrt n\) 的质因数,其它用到的 \(p_{k-1}\) 肯定都在 \(\sqrt n\) 以下。而剩最后一个质数的时候 \(F_k(x)\)\(x\) 当中也不可能存在两个在 \(\sqrt n\) 以上的因数,也就是说把小于等于 \(\sqrt n\) 的质因数减去即可。这样,只需要筛出小于等于 \(\sqrt n\) 的质数的 \(F_p(p_k)\) 即可。

然后是 \(F_p(x)\) ,这里面 \(F_k(x)\) 一定是由 \(n\) 除掉某些数得来,整除分块以下得到的数会在 \(\sqrt n\) 级别。

然后只需要 \(O(\sqrt n)\) 的空间复杂度即可。

4.洲阁筛

杜教筛套整除分块之后复杂度不变,但是min_25筛就不是。

需要进行整除分块次min_25筛的话,考虑改变 \(F_k(x)\) 的定义

\(F_k(x)=\sum_{i=1}^x f(x) [i\in P||minp(i)>=p_k]\) ,和求 \(F_p\) 时类似,表示埃氏筛进行到 \(p_{k-1}\) 之后剩下的数。当 \(p_k^2\leq x\) 时,可以类似求 \(F_p\) 反过来,每次加入在 \(k\) 轮中被筛掉而 \(k-1\) 轮中没有删掉的数。直接给出式子

\[F_k(x)=F_{k+1}(x)+\sum_{c=1}^{p_k^{c+1}\leq x} f(p_k^c)(F_{k+1}(x/p_k^c)-F_p(p_k))+f(p_k^{c+1}) \]

边界条件为 \(F_{|P|+1}(x)=F_p(x)\) ,即只剩下质数的情况。

这样用和求 \(F_p\) 一样的递推的方法就能快速求出 \(F_k(x)\) ,不过常数略大似乎跑不了 \(1e12\) 的说。

5.用法

由于min_25筛在分解到质数时特判这一特点,可以用来处理因数最值类的问题。

posted @ 2025-07-25 14:27  cinccout  阅读(14)  评论(0)    收藏  举报