zoukankan      html  css  js  c++  java
  • Min25筛

      顾名思义,这是\(min25dalao\)发明的算法,可以用来处理一些积性函数求和的问题。

    • 用途
      我们现在有一个积性函数\(F(x)\),要我们快速计算前缀和,即求

    \[\sum_{i=1}^{n} F(i) \]

    • 前置知识
      数论函数基本性质,比较基础就不说了...

    • 使用前提
      \(1.\forall p \in prime F(p)\)是一个低阶多项式
      \(2.\forall p \in prime,k \in N^* F(p^k)\)可以快速求出
      (条件说实话还是比较严苛的...)

    • 解决问题
      我们明确了一些大前提,那么到底该怎么实现呢?
      首先将和式拆开,即分成

    \[\sum_{p \in prime} F(p) + \sum_{i \notin prime} F(i) \]

      先考虑前半部分,也就是所有质数上的值。

    • \(step 1\) 求解质数
      考虑构造一个完全积性函数\(F'(x)\),使得\(\forall p \in prime,F'(p)=F(p)\)
      那么我们只要求出\(F'(x)\)在所有质数上的值即可
      这里我们运用\(DP\)的思想,设

    \[g(n,m)=\sum_{i=1}^{n} F'(i)[i \in prime | minp(i)>p_m] \]

      那么可以得到转移

    \[g(n,m)=\begin{cases} g(n,m-1)&p_m>\sqrt{n}\\ g(n,m-1)-F'(p_m)[g(\frac{n}{p_m},m-1)-g(p_m-1,m-1)]&p_m \leq \sqrt{n} \end{cases} \]

      我们设\(k = max\){\(k|p_k\leq\sqrt{n}\)}
      则答案显然为\(g(n,k)\)
      这样前半部分就结束了,我们接下来考虑求解整个函数。

    • \(step 2\) 求解答案
      我们可以考虑和求质数的值一样的方法,设

    \[S(n,m)=\sum_{i=1}^{n}F(i)[minp(i)>p_m] \]

      那么可以得到转移

    \[S(n,m)=g(n,k)-\sum_{i=1}^{m-1}F(p_i)+\sum_{i>m} \sum_{e} F(p_i^e)(S(\frac{n}{p_i^e},i)+[e>1]) \]

      这样我们就做完了。

  • 相关阅读:
    shell脚本编程-结构化命令3-while、until命令
    shell脚本编程-结构化命令2-for命令
    sscanf解析复杂字符串,双引号通配符的使用问题
    shell脚本编程-结构化命令1-分支语句
    shell脚本编程基础
    linux系统管理的基本命令2
    linux系统管理的基本命令
    redis
    Eclipse启动报错
    java斗地主发牌源码
  • 原文地址:https://www.cnblogs.com/leukocyte/p/13268508.html
Copyright © 2011-2022 走看看