Min_25筛可以在(O(frac{n^frac{3}{4}}{log n}))((O(n^{1-epsilon}))?反正不会证)的时间内求出部分与素数有关的函数的前缀和。在常规范围内(一般(10^{10})),它比洲阁筛不知道高到哪里去了。
例:求积性函数(f(x))的前(n)项和((nleqslant10^{10}))
第一步:对于每个(1leqslant ileqslant n),都需要求出(sum_{p=1}^{n/i}[p ext{是素数}]f(p))
由于只用求素数处的值,可以找一个(g(x))为完全积性函数,使得(f(x))和(g(x))在素数处相等,且(g(x))容易求前缀和。
设(p_i)为第(i)个素数,(minp_i)表示(i)的最小质因数,(s_i=sum_{j=1}^{i}g(p_j)),(t_{i,j}=sum_{w=2}^{n}[win p; ext{or};minp_w>p_j]g(w))。显然,(t_{i,0}=sum_{w=1}^{i}g(w)-1)。
考虑如何由递推得到(t_{i,j}),可以看出(t_{i,j}=t_{i,j-1}-(t_{lfloorfrac{i}{p_j} floor,j-1}-s_{j-1}) imes g(p_j)),即从(t_{i,j-1})中减掉(minp_x=p)的(g(x))。
但是,当(lfloorfrac{i}{p_j} floor<p_{j-1})时,就会出现多减了的情况。仔细思考一下,当(p_j^2leqslant i)且(p_{j+1}>i)时,(forall xin[2,i],minp_xleqslant sqrt{n}),即(minp_xleqslant p_j),就可以停止计算,此时(lfloorfrac{i}{p_j} floorgeqslant p_j>p_{j-1}),又由于(p_i)递增,所以不会多减。
容易发现,第一维(i)只有(O(sqrt{n}))种取值,所以可以做一些映射,再用滚动数组优化掉第二维。设(sum_i=t_{i,infty})。
复杂度:(O( ext{不会证}))。
第二步:求(sum_{i=2}^nf(i))
设(sol(i,j)=sum_{i=2}^n[win p; ext{or};minp_wgeqslant p_j]f(i)),则(sol(i,j)=sum_i+sum_{id=j,p_{id}^2leqslant i}sum_{k=1,p_{id}^{k+1}leqslant i}(sol(frac{i}{p_{id}^k},id+1)-s_{id})*f(p_{id}^k)+f(p_{id}^{k+1})),即枚举最小质因数出现的次数。
复杂度:(O( ext{还是不会证}))。