min_25筛
设有积性函数f(x)f(x)f(x),满足f(Pi)f(P_i)f(Pi)是多项式,且能够快速计算出f(Pik)f(P_i^k)f(Pik)。求其前缀和。
一个函数
令minp(x)minp(x)minp(x)表示xxx的最小质因子。令PPP为质数集,其中第111个元素为222。设g(n,j)=∑i=1nf(i)[i∈P∨minp(i)>Pj]g(n,j)=\sum_{i=1}^nf(i)[i\in P\lor minp(i)>P_j]g(n,j)=∑i=1nf(i)[i∈P∨minp(i)>Pj]。
考虑从g(n,j−1)g(n,j-1)g(n,j−1)推到g(n,j)g(n,j)g(n,j)。这个过程相当于删去那些最小质因数为PjP_jPj的合数。也就是说,这些数除以PjP_jPj后的最小质因数还是大于Pj−1P_{j-1}Pj−1的。那要删去的数的答案就是f(Pj)⋅g(nPj,j−1)f(P_j)\cdot g(\frac{n}{P_j},j-1)f(Pj)⋅g(Pjn,j−1)吗?发现这时还多删了除以PjP_jPj后比PjP_jPj小的质数的答案,因此把这部分补回去。则转移就是g(n,j)=g(n,j−1)−f(Pj)⋅[g(nPj,j−1)−g(Pj−1,j−1)]g(n,j)=g(n,j-1)-f(P_j)\cdot [g(\frac{n}{P_j},j-1)-g(P_j-1,j-1)]g(n,j)=g(n,j−1)−f(Pj)⋅[g(Pjn,j−1)−g(Pj−1,j−1)]
这个是没有特判各种情况时的转移。首先,若Pj2>nP_j^2>nPj2>n,则显然这次什么也删不了,即g(n,j)=g(n,j−1)g(n,j)=g(n,j-1)g(n,j)=g(n,j−1)。另外还有边界,即g(Pj,j)=∑i=1jf(Pj)g(P_j,j)=\sum_{i=1}^jf(P_j)g(Pj,j)=∑i=1jf(Pj)。
如果我们要计算g(n,m)g(n,m)g(n,m),则我们只需要对n\sqrt nn内的质数计算即可。该部分的复杂度为O(n34logn)O(\frac{n^{\frac{3}{4}}}{\log n})O(lognn43)。
另一个函数
设S(n,j)=∑i=1nf(i)[minp(i)≥Pj]S(n,j)=\sum_{i=1}^nf(i)[minp(i)\ge P_j]S(n,j)=∑i=1nf(i)[minp(i)≥Pj]。则fff的前缀和就是S(n,1)+f(1)S(n,1)+f(1)S(n,1)+f(1)。
先预处理要求范围内的ggg。考虑如何转移SSS,将答案为质数的答案和合数的答案,其中质数直接计算,合数递归计算。质数的答案可以由ggg算出,是g(n,j)−∑i=1j−1f(Pi)g(n,j)-\sum_{i=1}^{j-1}f(P_i)g(n,j)−∑i=1j−1f(Pi)。对于合数,枚举其最小质因子及其出现次数。转移为S(n,j)=g(n,j)−∑i=1j−1f(Pi)+∑k=jPk2≤n∑l=1Pkl+1≤nf(Pkl)⋅S(nPkl,k+1)+f(Pkl+1)S(n,j)=g(n,j)-\sum_{i=1}^{j-1}f(P_i)+\sum_{k=j}^{P_k^2\le n}\sum_{l=1}^{P_k^{l+1}\le n}f(P_k^l)\cdot S(\frac{n}{P_k^l},k+1)+f(P_k^{l+1})S(n,j)=g(n,j)−i=1∑j−1f(Pi)+k=j∑Pk2≤nl=1∑Pkl+1≤nf(Pkl)⋅S(Pkln,k+1)+f(Pkl+1)
总复杂度为O(n34logn)O(\frac{n^{\frac{3}{4}}}{\log n})O(lognn43)。