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_jleq i),且x的最小质因数大于等于(P_j),这样的(f(P_j)*f(x))应当减去。
可以发现,它就是(g(frac{i}{P_j},j-1))减去小于(P_j)的质数。质数的前缀和可以预处理。
暂时不会去写了