• 「不会」Min25筛


      大概的思路是把所有数分成质数和合数考虑

      对于质数,必须找出一个很简单的完全积性函数和所求函数拟合

        把所有数当做质数看待求个前缀和,然后再枚举合数的最小质因子把合数T掉

        枚举到根号n,即可保证把n以内的合数都去掉了,质数已经求出来了

        具体把状态设计为G(n,k)表示小于等于n的数中最小质因子大于第k个质数或本身为质数的贡献

        枚举k可以只开一维数组,像一维背包一样

        然后依次从G[n]中减去最小质因子等于第k个质数的即可,因为小于k的都在之前减过了

        等于k的如何获得,就是小于等于n/k的数中最小质因子大于k-1的贡献

        直接利用G[n/k],并且把"本身为质数"&&"本身小于k"这部分减掉就行

        

      对于合数,由于其最小质因子一定不大于根号n,所以枚举最小质因子不需要筛出很多的素数

        利用积性函数的性质枚举最小质因子的次幂把合数一一加进来即可

        考虑如果这个合数没有大于根号n的因子,那么会在递归过程中把其所有质因子的次幂一一累乘

        如果有一个大于根号n的因子,那么最后一层递归会返回其最大质因子作为质数的贡献

        具体把状态设计为S(n,k),表示小于等于n的数中最小质因子大于等于第k个质数的总贡献

        这样做就是为了实现将某一范围的数返回和其他因子幂相乘,利用商有限的结论需要预处理的东西也不多

      质数部分直接算(因为完全积性),合数部分枚举最小质因子及其次数算,记得加上质数和所枚举的p^e的贡献

      复杂度$O(sumlimits_{x=1}^{sqrt{n}} frac{sqrt{x}}{logsqrt{x}}+sumlimits_{x=1}^{sqrt{n}}frac{sqrt{n/x}}{logsqrt{n/x}})=O(frac{n^{1/2} sqrt{n}^{1/2}}{log n})=O(frac{n^{frac{3}{4}}}{logn})$

      powerfulnumber筛

      用于筛积性函数$F(x)$前缀和。

      设计积性函数$G(x)$满足$G(p)=F(p) && F=G*H$

      $F(p)=G(p)*H(1)+G(1)*H(p)$,得$H(p)=0$

      由于$F,G$积性,$H$也为积性函数,所以只有$H$的质因子的次数都$ge 2$时才可能有点值

      称这类数为$pwerfulnumber=a^2b^3$,$n$以内的数目为$sumlimits_{i=1}^{sqrt{n}}(frac{n}{i^2})^{frac{1}{3}}$

      积分可得为$O(sqrt{n})$ $$sumlimits_{i=1}^n F(i)=sumlimits_{i*j<=n} G(i)*H(j)$$ $$=sumlimits_{iin powerfulnum} H(i) sumlimits_{j=1}^{n/i} G(j)$$

      然后用F(p^k)的狄立刻雷卷积归纳出H的表达式,一般可以爆搜出根号n个powerfulnum然后用杜教筛求后面的部分。

  • 相关阅读:
    RabbitMQ 高可用集群搭建
    Ubuntu16.04 安装RabbitMQ
    surging+CentOS7+docker+rancher2.0 菜鸟部署运行笔记
    查看进程使用swap的状态
    查看磁盘信息命令汇总
    复制一批文件,每个文件名包含日期
    小妙招:yum 夯住了怎么办?
    测试并发数
    centos7安装python3
    使用rsync需要注意的一些问题
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/12375615.html
Copyright © 2020-2023  润新知