• 《杜教筛》


    杜教筛:算是筛法里特别实用的一个算法吧,复杂度是亚线性。

    前置知识:

    积性函数:
    对于函数f,如果满足f[1] = 1,且当p,q互质时,满足f[p * q] = f[p] * f[q],那么这个函数即为积性函数。

    当p,q不互质时都满足f[p * q] = f[p] * f[q],那么这个函数即为完全积性函数。

    积性函数满足一个性质:两个积性函数相乘还是积性函数,这是非常重要的一步。

    杜教筛就是用来筛积性函数前缀和的。

    常见的一些积性函数:

    欧拉函数$phi(n) $ 

    莫比乌斯函数$mu(n) $

    约数个数d(n)

    约数和函数$sigma (n)$

    实用的完全积性函数:

    元函数:$varepsilon (n)$,$varepsilon (n) = [n = 1]$

    恒等函数:$I(n)$,值恒等于1

    单位函数:$id(n)$,id(n) = n

    狄利克雷卷积:

    非常重要的一个知识。

    有定义:$(f * g) (n) = sum_{d | n}^{}f(d) * g(frac{n}{d})$

    表示将函数f卷函数g,以后都默认范围为n。

    狄利克雷卷积满足:乘法交换律,结合律和分配率。

    即:

    $f * g = g * f$

    $f * (g * h) = (f * g) * h$

    $f * (g + h) = f * g + f * h$

    从定义出发很容易证明上述三条。

    给出一个很重要的性质:$f * epsilon = f$

    证明:$f * epsilon = sum_{d | n}^{} f[d] * epsilon (frac{n}{d})$

    当d = n时有值,可得$f * epsilon = f$

     有了狄利克雷卷积就可以证明许多性质:如莫比乌斯反演 和一些函数。。

    杜教筛:

    假设要求的积性函数前缀和为$sum_{i = 1}^{n}f(i)$

    我们需要构造两个函数g,h,满足$g  * f= h$(此处为狄利克雷卷积)

    然后我们设$S(n) = sum_{i = 1}^{n}f(i)$

    那么,我们先求解$sum_{i = 1}^{n}h(i)$

    $sum_{i = 1}^{n} h(i) = sum_{i = 1}^{n}sum_{d | i}^{}g(d) * f(frac{i}{d}) = sum_{d = 1}^{n} sum_{i = 1}^{frac{n}{d}}g(d) * f(i) = sum_{d = 1}^{n}g(d) S(frac{n}{d})$

    将右边第一项分解出来可得:

    $sum_{i = 1}^{n} h(i) = sum_{d = 1}^{n}g(d) S(frac{n}{d}) = g(1) * S(n) + sum_{d = 2}^{n}g(d) S(frac{n}{d})$

    那么就可得$g(1) * S(n) = sum_{i = 1}^{n} h(i) -  sum_{d = 2}^{n}g(d) S(frac{n}{d})$

    所以我们构造的两个函数f,g的前缀和都需要能高速求解,那么就可以求解上诉式子了。

    显然要先预处理$sqrt{n}$的数据。

    Record:杜教筛构造狄利克雷卷积(下面推导对于g(1) = 1时直接省略

    1:$ans = sum_{i = 1}^{n} mu (i)$

    因为$sum_{d | n}^{}mu (d) = [n = 1]$,所以可以构造狄利克雷卷积$u * I = epsilon$

    $S(n) = sum_{i = 1}^{n} epsilon (i) - sum_{d = 2}^{n}g(d) * S(frac{n}{d}) = 1 - sum_{d = 2}^{n}S(frac{n}{d})$

    2:$ans = sum_{i = 1}^{n}phi (i)$

    因为$sum_{d | n}^{}phi (d) = n$,所以可以构造狄利克雷卷积$phi * I = id$

    $S(n) = sum_{i = 1}^{n} id(i) - sum_{d = 2}^{n} I(d) * S(frac{n}{d}) = frac{n * (n + 1)}{2} - sum_{d = 2}^{n}S(frac{n}{d})$

    3:$ans = sum_{i = 1}^{n}i phi (i)$

    考虑狄利克雷卷积的形式:

    $h(n) = sum_{d | n}^{}f(d) * g(frac{n}{d}) = sum_{d | n}^{}d * phi (d) * g(frac{n}{d})$

    仔细观察可以发现,我们最好能消去前面的d,且g下标为n / d,那么对g套用id函数。

    得$h(n) = sum_{d | n}^{}f(d) * g(frac{n}{d}) = n sum_{d | n}^{}phi (d) = n^{2}$

    平方的前缀和公式:n * (n + 1) * (2n + 1) / 6

    那么可得$S(n) = sum_{i = 1}^{n} i^{2} - sum_{d = 2}^{n} id(d) * S(frac{n}{d}) = frac{n * (n + 1) * (2n + 1)}{2} - sum_{d = 2}^{n} d * S(frac{n}{d})$

    4:

  • 相关阅读:
    二分查找
    「数学」二次函数中项系数大小与图像的关系
    「数学」夹角公式
    「CF80A」Panoramix's Prediction
    「Luogu P6101」[EER2]出言不逊
    「数学」三角函数公式以及部分证明
    「Luogu P6069」[MdOI2020] Group
    「CF80B」Depression
    「数学」Menelaus定理与Ceva定理
    「AT1175」ニコニコ文字列
  • 原文地址:https://www.cnblogs.com/zwjzwj/p/13905083.html
Copyright © 2020-2023  润新知