min25筛

min25筛,可以用来求积性函数前缀和。
这个函数要求,\(f(p^x)\)能表示为关于\(p^x\)的一个多项式。
算法分两步:
1.求出对于所有\(x=\frac{n}{i}\),x以内所有质数的f和。
方法如下:
首先,把所有数当成质数代入多项式,求出一个“假的”前缀和。
然后,通过埃氏筛法,将非质数除去。
每次,当筛质数\(P_x\)时,将最小质因数大于等于\(P_x\)的除去。
这可以利用之前的结果,进行dp。
具体来说,设\(g(i,j)\)表示1到i内,进行j次筛法,剩的数,代入多项式算的f值之和
由于是多项式,我们可以依次求出每一项,这样,可以保证它是完全积性函数。
根据定义:\(g(i,j)\)包括两部分:
1、i以内的所有质数。
2、i以内,最小质因数大于\(P_j\)的合数。
考虑求法:
\(P_j^2>i\),那么\(P_j\)不会筛掉任何数,\(g(i,j)=g(i,j-1)\)
否则,筛掉的是最小质因数大于等于\(P_j\),且为\(P_j\)倍数的合数。-
即对于所有x,满足\(x*P_j\leq i\),且x的最小质因数大于等于\(P_j\),这样的\(f(P_j)*f(x)\)应当减去。
可以发现,它就是\(g(\frac{i}{P_j},j-1)\)减去小于\(P_j\)的质数。质数的前缀和可以预处理。


暂时不会去写了

posted @ 2019-12-13 22:48  lnzwz  阅读(193)  评论(0)    收藏  举报