zoukankan      html  css  js  c++  java
  • 「学习笔记」min_25筛

    前置姿势

    魔力筛

    其实不看也没关系

    用途和限制

    (mathrm{O}(frac{n^{0.75}}{log n}))的时间内求出一个积性函数的前缀和。

    所求的函数(mathbf f(x))要满足以下条件:

    1. (mathbf f(p))是一个多项式,其中(p)是质数
    2. (mathbf f(p^c))要能够快速计算。

    算法流程

    首先我们需要求出对于每一个(leftlfloor frac nd ight floor)求出(sum_{i=1}^{leftlfloor frac nd ight floor} [i in P] mathbf f(i)),其中(P)是质数集合。

    首先筛出(sqrt n)以内的质数,设(P_j)表示从小到大第(j)个质数。

    (mathbf g(n, j))表示所有最小质因子大于(P_j)的数加上质数的(mathbf f(i))的和。

    那么(mathbf g(n, |P|))就是所求。

    考虑(mathbf g(n, j))的转移,分两种情况。

    1. (P_j^2 > n)

      这个质数不会造成任何影响,于是(mathbf g(n, j) = mathbf g(n, j - 1))

    2. (P_J^2 leq n)

      这里我们要考虑筛掉了多少个数字。

      那么筛掉的数字中一定含有最小质因子(P_j),所以我们考虑减去(mathbf g(frac n{P_j}, j - 1)),但是这样我们多减了前(j - 1)个质数的(mathbf f)之和,所以要加上(sum_{i=1}^{j - 1}mathbf f(P_j) = mathbf g(P_{j - 1}, j - 1))

    总结一下就是:

    [mathbf g(n,j)= egin{cases} mathbf g(n,j-1)&P_j^2gt n\ mathbf g(n,j-1)-mathbf f(P_j)[mathbf g(frac{n}{P_j},j-1)-mathbf g(P_{j - 1}, j - 1)]&P_j^2leq n end{cases} ]

    这里可以滚动数组求一下。(感觉和魔力筛很像呢)

    到这里我们发现我们已经对于(x = leftlfloor frac ni ight floor)求出(sum_{i=1}^x [i in P]mathbf f(i))

    (mathbf S(n, j) = sum_{i=1}^n [mathrm{minp}(i) geq P_j]mathbf f(i))

    那么最终的答案为(mathbf S(n, 1) + 1)

    然后我们将(n)以内的数字分为质数和合数

    质数部分我们得出答案了,为(mathbf g(n, |P|) - mathbf g(P_{j - 1}, j - 1))

    考虑合数,其实很简单,考虑枚举最小质因子和其出现次数,然后爆算就可以了。

    [mathbf S(n,j)=mathbf g(n, |P|) - mathbf g(P_{j - 1}, j - 1)+sum_{k=j}^{P_k^2le n}sum_{e=1}^{P_k^{e+1}le n}mathbf S(frac{n}{P_k^e},k+1) imes mathbf f(P_k^e)+mathbf f(P_k^{e+1}) ]

    然后就没啦。

    最后讲一个东西,就是(mathbf S)不用记忆化。

    例题什么的以后再补吧。

  • 相关阅读:
    Liunx运维(七)-用户管理及用户信息查询命令
    容器网络原理分析:veth 和 network namespace
    浅谈 Docker 网络:单节点多容器
    浅谈 Docker 网络:单节点单容器
    图图图
    LinkPrediction可能有用的数据集
    2021年展望
    2020年总结
    毕业设计:基于web的外卖订餐系统的设计与实现
    机器学习和数据分析在实体识别方面的简单应用
  • 原文地址:https://www.cnblogs.com/cj-xxz/p/10707518.html
Copyright © 2011-2022 走看看