总之我也不知道这个奇怪的名字是怎么来的。
\(Min\_25\)筛用来计算一类积性函数前缀和。
如果一个积性函数\(F(x)\)在质数单点是一个可以快速计算的关于此质数的多项式。
那么可以用\(Min\_25筛\)。
这个东西和质数关系很大。
我们考虑分开处理质数和非质数的贡献。
首先处理质数:
设,\(R(n)\)为\(n\)的最小质因子,\(P\)为质因子集合,\(p_i\)为从小到大第\(i\)个质数。
\(\forall\ x\in P,F(x)=x^k\)。
设:
\[g(n,j)=\sum\limits_{i=1}^{n}i^k[i\in P||R(i)>p_j]\]
那么转移:
如果当前\(p_j^2>n\),因为最小的含有\(p_j\)的合数是\(p_j^2\),所以没有贡献需要减掉。
那么:
\[g(n,j)=g(n,j-1)\]
如果当前\(p_j^2<=n\),这个时候要减掉一些贡献了。
这些贡献是\(p_j\)所带来的,而这个时候左右\(R(i)=p_j\)的贡献都需要被减掉。
考虑求出这部分的贡献。
那么显然是对于其所能达到的最小的合数开始计算到所能达到的最大合数。
这一部分显然是属于\([p_j^2,n]\)。
那么考虑这一部分的贡献。
可以容易的得到转移方程。
\[g(n,j)=g(n,j-1)-p_j^k(g(\frac{n}{p_j},j-1)-g(p_j-1,j-1))\]
这样合并转移表达式就是:
\[
g(n,j)=
\begin{cases}
g(n,j-1)&p_j^2>n\\
g(n,j-1)-p_j^k(g(\frac{n}{p_j},j-1)-g(p_j-1,j-1))&p_j^2\leq n\\
\end{cases}
\]
初始化一下:
\[g(p_j,j)=\sum\limits_{i=1}^{j}p_i^k\]
这样我们就计算了质数部分了。
然后考虑计算真正的函数前缀和。
设\[S(n,j)=\sum\limits_{i=1}^{n}F(i)[R(i)\leq p_j]\]
区分计算质数和合数的贡献。
考虑质数部分:\(g(n,|P|)-\sum\limits_{i=1}^{j-1}F(p_i)\)
合数部分考虑枚举最小质因子及其在某个数中的幂次,这里要满足\(\frac{n}{p_k^e}>p_k\),这样才能保证这个数的最小质因数被除尽。
由于我们先暂时的不考虑1的贡献,所以需要加上\(p_k\)的某次幂的贡献,所以这里的贡献是:
\[\sum\limits_{k\geq j}\sum\limits_{p_k^{e+1}<n}(F(p_k^e)S(\frac{n}{p_k^e},k+1)+F(p_k^{e+1}))\]
这样就得到了我们的递推式了:
\[S(n,j)=g(n,|P|)-\sum\limits_{i=1}^{j-1}F(p_i)+\sum\limits_{k\geq j}\sum\limits_{p_k^{e+1}<n}(F(p_k^e)S(\frac{n}{p_k^e},k+1)+F(p_k^{e+1}))\]
答案就是:
\[ans=S(n,0)+F(1)\]
复杂度不知道。
但是在\(n<=10^13\)范围里面跑得很快而且比州阁筛好写很多。
来源:https://www.cnblogs.com/Lrefrain/p/12318781.html