zoukankan      html  css  js  c++  java
  • 《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) = igl(egin{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}igr)$

     解释:这个转移,首先如果满足$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。

    完结~

  • 相关阅读:
    关于信号量sem_wait的整理(转)
    WPF版的正则表达式工具开发完成
    F#中的Tuples、函数类型和参数柯里化
    一个WPF版的类Vista的地址栏控件Breadcrumb Bar
    多文档版的的正则表达式工具
    Reactive Extensions for .NET (Rx)
    解决下载的电子书中换行的问题
    WPF下的语法高亮控件——AvalonEdit
    把正则表达式测试工具界面更新为Aero效果的了
    Blend可以支持.net 4.0的工程了
  • 原文地址:https://www.cnblogs.com/zwjzwj/p/13707110.html
Copyright © 2011-2022 走看看