[模板]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)=\sum\limits_{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(\lfloor\frac{n}{pri_j}\rfloor,j-1)-\sum\limits_{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的和啦!然而这有什么卵用呢..

猜你喜欢

转载自www.cnblogs.com/Ressed/p/10257295.html