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]) \]

      这样我们就做完了。

  • 相关阅读:
    3.27 课堂 笔记
    第四周 4-2
    3-26
    Java EE期末项目
    条件查询、SQL、JPQL、HQL比较
    J2EE 第八周(04.23-04.29)
    J2EE 第七周(04.16-04.22)
    J2EE 第六周(04.09-04.15)
    J2EE 第五周(04.02-04.08)
    J2EE 第四周(03.26-04.01)
  • 原文地址:https://www.cnblogs.com/leukocyte/p/13268508.html
Copyright © 2011-2022 走看看