《Min25筛》

前言:It's hard, but keep going

花了n久的时间,终于可以算是理解了吧~

 

Min25筛:适用于求解积性函数f(i)的前缀和问题。

对于这个积性函数,需要满足$f(p^{k})$可以快速求出。

关于这个快速求出,就是可以理解为$f(p^{k})$是一个关于p的低阶多项式。

因为多项式可以拆分成多个单项式,所以就比较好求。

 

具体求解:

我们将函数分解质数和 和合数和,即为:

$\sum_{i = 1}^{n}f(i) = \sum_{}f(p)[p~is~a~prime] ~+~ \sum_{}^{} f(i)[i~is~not~a~prime~or~i = 1]$

这样就拆分为了质数和 和 合数和。

然后我们分开计算两部分即可。

 对于第一部分的质数和,我们定义一个函数:

$g(n,j) = \sum_{i = 1}^{n}F(i)[i~is~a~prime~or~mini~>~p_{j}^{}]$

F(i)是我们找的一个完全积性函数,满足他在质数处的取值和f(i)一样。

mini表示i的最小质因子,$p_{j}^{}$表示第j个质数。

上面这个式子就是统计了质数的F(i)的和 + 最小质因子大于$p_{j}^{}$的F(i)的和。

 考虑从g(n,j-1)到g(n,j)的转移。

$g(n,j) = \bigl(\begin{smallmatrix}
g(n,j-1) & & p_{j}^{}~>~\sqrt{n}\\
g(n,j-1) - F(p_{j}^{})(~g(\frac{n}{p_{j}^{}},j-1) - g(p_{j-1}^{},j-1)) & & p_{j}^{}~<=~\sqrt{n}
\end{smallmatrix}\bigr)$

 解释:这个转移,首先如果满足$p_{j}^{}~>~\sqrt{n}$,那么pj不会产生作为某个数的最小因子产生新的贡献。

然后对于求质数和的情况,大家都是1~n,所以第一个条件可以直接转移。

对于第二个,pj会作为某个数的最小质因子产生新的贡献,所以要减去这个贡献,那么为什么减去而不是加上这个贡献?

因为我们的g函数是求mini > pj,到pj之后,显然之前满足mini <= pj的就不满足了,所以是减去这个贡献。

对于这个贡献的计算,考虑容斥,对于这个质因子的贡献的函数,显然是g(n,j-1)里满足条件的值,然后因为这是积性函数,所以我们把f(pj)提出来。

可以发现这中间多计算了<pj的质数的代价,所以后面要减去这个代价。

 可以发现,这里在$p_{j}^{} > \sqrt{n}$后,后面的质数肯定都满足这个条件,且这个值都是一样的,因为都是第一种转移了。

所以,我们只需要处理$\sqrt{n}$的质数即可,即我们可以线性筛出前$\sqrt{n}$个质数,并做$\sqrt{n}$此g函数的转移。

复杂度是O($\sqrt{n}$)

 可以注意到这里的$g(p_{j-1}^{},j-1)$其实就是前j-1个质数的F(i)函数和,所以我们可以在线性筛时同时处理出来。

 

求解:

定义函数:$S(n,j) = \sum_{i = 1}^{n} f(i)[mini > pj]$

依旧分质数和合数来讨论。

因为质数处的取值 和 F(x)一样,所以就是g(n,j) - 多的质数部分的函数值。

这里的函数值是关于整个的g。

这里用$\sum_{i = 1}^{j} p_{i}^{}$来代替,实际上并不是质数的和,但是不同题目都不同。

最终得$S(n,j) = g(n,j) - \sum_{i = 1}^{j} p_{i}^{} + \sum_{k > j}^{} \sum_{e = 1}^{p_{k}^{e} <= n} f(p_{k}^{e})[S(\frac{n}{p_{k}^{e}}) + |e > 1|]$

前一部分为质数的值,后面就是枚举最大质因子然后枚举次数,然后做积性函数的提取,和前面分析g的时候差不多。

然后|e > 1|表示如果k次数不为1,那么就还要再增加一个 f($p_{k}^{e}$)。

最终答案要加上f(1),因为1处不会被计算入S。

完结~

posted @ 2020-09-21 18:07  levill  阅读(174)  评论(0编辑  收藏  举报