[模板]Min_25筛
Posted ressed
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模板]Min_25筛相关的知识,希望对你有一定的参考价值。
用途
快速($O(frac{n^{3/4}}{logn})$)地计算一些函数f的前缀和,以及(作为中间结果的)只计算质数的前缀和
一般要求f(p)是积性函数,$f(p)$是多项式的形式,且$f(p^k)$可以快速计算
做法
首先考虑求出范围内的质数的取值的和
如果有$f(p)=sum{a_ip^i}$
那么我们构造$h_i(x)=x^i$,不难发现$h_i$是完全积性的
就是说,把f在质数的时候的式子拆开,然后让它在不是质数的时候也成立
考虑求其中的一个h,接下来设$pri_j$是第j个质数
设$g(n,j)=sumlimits_{i=1}^{n}[i in Prime && min_divisor(i)>pri_j]h(j)$,即n范围内质数或者最小质因数$>pri_j$的h值之和
可以当成是埃氏筛法的过程,已经筛掉了前j个质数
那么$g(n,inf)$就是要求的质数的和,g(n,1)就是所有数的h的和
(关于计算g(n,1),次数要是小的话可以直接带公式,大的话就要斯特林数或者别的什么来求自然数幂和了..不过别忘了减掉1)
考虑转移,有:
$g(n,j)=g(n,j-1) , pri_j*pri_j>n$
$g(n,j)=g(n,j-1)-h(pri_j)(g(lfloorfrac{n}{pri_j} floor,j-1)-sumlimits_{i=1}^{j-1}h(pri_j)) , pri_j*pri_j<=n$
考虑$pri_j*pri_j<=n$的情况,它在从$g(n,j-1)$转移过来的时候,需要减掉那些最小质因子是$pri_j$的,而h又是完全积性的,所以可以直接乘。但这样减会多减掉那些比$pri_j$小的质数乘$pri_j$,需要再加回来
于是我们就求出来质数的h的和啦!然而这有什么卵用呢..
以上是关于[模板]Min_25筛的主要内容,如果未能解决你的问题,请参考以下文章