min_25筛学习

min_25筛是用于处理可以快速算出某个质数的值的积性函数的前缀和问题的一种筛。
首先定义这样一个东西:
g
这个东西表示1~n中所有最小质因子大于第j个质数或自己就是质数的数,把它们全部当成质数算出来的前缀和是多少。转移如图所示(搬自大巨佬YYB的博客)
转移相当于减去所有最小质因子是这个数的数的值,然后补上所有不慎被删的质数的值(所有小于pj-1的质数的最小质因子肯定小于pj)。
然后定义h(n,j)表示1-n中所有最小质因子大于等于Pj的数i的f(i)的和,注意此处的f是真实值,而上面算g的时候实际上是全部当成质数算,是构造的值。
在这里插入图片描述
前面两项就是质数的贡献,后面则分别是质数的若干次方的答案,以及以当前考虑的质数为最小质因子的所有f(i)的贡献。
最后S(n,0)即为答案。
注意式子中 S ( [ n p k e ] , k + 1 ) S([\frac {n}{p_k^e}],k+1) S([pken],k+1)处,因为我们枚举的是最小质因子,所以并不能是 S ( [ n p k e ] , j + 1 ) S([\frac {n}{p_k^e}],j+1) S([pken],j+1),否则会完蛋
还有一个性质,就是我们发现 [ n p k e ] [\frac {n}{p_k^e}] [pken]这个东西只有 n \sqrt{n} n 的取值,所以可以优化。
为啥呢?
一个显然的性质是 [ [ n a ] b ] = [ n a ∗ b ] [\frac{[\frac{n}{a}]}{b}]=[\frac{n}{a*b}] [b[an]]=[abn],这个东西考虑用 原 数 = k ∗ a ∗ b 原数=k*a*b =kab的表示即可。
所以后面那个东西总共只会有根号的取值。

你可能感兴趣的:(各类笔记)