zoukankan      html  css  js  c++  java
  • 狄利克雷生成函数

    本篇讨论的所有函数都是积性函数。若 \(f\) 为 DGF,则 \(f\left(s\right)\) 简写作 \(f\)

    定义

    对于一个数论函数,设在 \(i\) 处的点值为 \(f_i\),则定义它的狄利克雷生成函数 DGF(Dirichlet Generating Function)为 \(f\left(s\right)=\sum\limits_{n=1}^{+\infty}\frac{f_n}{n^s}\)
    若存在两个狄利克雷生成函数 \(f,g\),其乘积为
    \(fg=\sum\limits_{n=1}^{+\infty}\sum\limits_{d\vert n}f_dg_{n/d}\times n^{-s}\)
    可以发现两个 DGF 的乘积恰好为它们的狄利克雷卷积的 DGF。
    黎曼 Zeta 函数定义为 \(\zeta\left(s\right)=\sum\limits_{n=1}^{+\infty}\frac{1}{n^s}\)

    一些常见数论函数的 DGF

    前置知识:

    • \(f\left(s-1\right)\)\(f\left(s\right)\) 点积 \(Id\) 的结果。
    • \(f\left(ks\right)\)\(f\left(s\right)\) 的第 \(x\) 位移至第 \(x^k\) 位的结果。

    单位元函数 \(e\) 的 DGF 显然为 \(e=1\)
    恒等函数 \(I\) 的 DGF 为 \(I=\sum\limits_{i=1}^{+\infty}\frac{1}{i^s}=\zeta\left(s\right)\to \prod\limits_{p\in prime}\sum\limits_{i=0}^{+\infty}\frac{1}{p^{is}}=\prod\limits_{p\in prime}\frac{1}{1-p^{-s}}=\zeta\left(s\right)\)
    莫比乌斯函数 \(\mu\) 的 DGF 为 \(\mu=\prod\limits_{p\in prime}\left(1-\frac{1}{p^s}\right)=\frac{1}{\prod\limits_{p\in prime}\frac{1}{1-p^{-s}}}=\frac{1}{\zeta \left(s\right)}\)
    欧拉函数 \(\varphi\) 的 DGF 为 \(\varphi=\prod\limits_{p\in prime}\left(1+\sum\limits_{i=1}^{+\infty}\frac{p^i-p^{i-1}}{p^{is}}\right)=\prod\limits_{p\in prime}\frac{1-p^{-s}}{1-p^{1-s}}=\frac{\zeta\left(s-1\right)}{\zeta\left(s\right)}\)
    幂函数 \(Id_k\) 的 DGF 为 \(Id_k=\prod\limits_{p\in prime}\sum\limits_{i=0}^{+\infty}\frac{p^{ik}}{p^{is}}=\prod\limits_{p\in prime}\frac{1}{1-p^{k-s}}=\zeta\left(s-k\right)\)
    除数函数 \(\sigma\) 的 DGF 为 \(\sigma_k=Id_k\times I=\zeta\left(s\right)\zeta\left(s-k\right)\)

    一些不常见函数的 DGF

    刘维尔函数 \(\lambda\) 的 DGF 为 \(\lambda=\prod\limits_{p\in prime}\sum\limits_{i=0}^{+\infty}\frac{\left(-1\right)^i}{p^{is}}=\prod\limits_{p\in prime}\frac{1}{1+p^{-s}}=\frac{\zeta\left(2s\right)}{\zeta\left(s\right)}\)
    \(\mu^2\) 的 DGF 为刘维尔函数的逆,即 \(\mu^2=\frac{\zeta\left(s\right)}{\zeta\left(2s\right)}\)
    仅在 \(\texttt{Powerful Number}\) 处值为 \(1\) 的函数的 DGF 为 \(\frac{\mu^2\left(3s\right)\times I}{\mu^2\left(s\right)} = \frac{\zeta\left(2s\right)\zeta\left(3s\right)}{\zeta\left(6s\right)}\)

    计算 DGF 的前缀和

    如果暴力计算在 \(p^k\) 处取值,其它数用 Euler 筛计算,且 \(p^k\) 处相对易于计算,则复杂度为 \(O\left(n\right)\),可计算出所有位置前缀和。
    对于某些特殊函数:

    • \(I\) :在 \(n\) 处前缀和为 \(n\),可以做到 \(O\left(1\right)\) 计算单个位置前缀和。
    • \(\mu^2\):暴力枚举 \(\frac{1}{\zeta\left(2s\right)}\) 中有值的位置再与 \(\zeta\left(s\right)\) 卷积做到 \(O\left(n^{1/3}\right)\) 计算单个位置前缀和。
    • 仅在 \(\texttt{Powerful Number}\) 处值为 \(1\) 的函数:先预处理 \(\frac{1}{\zeta\left(s\right)}\) 在小于 \(n^{1/6}\) 处取值,\(\zeta\left(2s\right)\zeta\left(3s\right)\) 单个位置前缀和可以整除分块做到 \(O\left(n^{1/5}\right)\),最后暴力卷积,复杂度 \(O\left(n^{1/5}\right)\)

    局限性

    不是所有积性函数都有用 \(\zeta\) 表示的封闭形式,如 \(d\left(i^3\right)\) 可能 就不行。
    不能表示的时候还是乖乖洲阁筛或者搞奇技淫巧吧。

    DGF 的乘法

    \(F=GH\to F_n=\sum\limits_{d\vert n}G_dH_{n/d}\)
    可以在 \(O\left(n\log n\right)\) 的时间内解决。

    DGF 的除法

    \(F=H/G\to \sum\limits_{d\vert n}F_dG_{\frac{n}{d}}=H_n\to F_n=H_n-\sum\limits_{d\vert n,d\neq 1}F_{\frac{n}{d}}G_d\)
    可以在 \(O\left(n\log n\right)\) 的时间内解决。

    DGF 的对数

    \(B=\ln A\to B'=\int \frac{A'}{A}\)
    所以只要求出导数和积分即可。
    但因为整数的 \(\ln\) 在整数域下没有定义,所以我们用质因子个数(相同的算多个)代替。(严谨证明可以参考 这个
    可以在 \(O\left(n\log n\right)\) 时间内解决。

    DGF 的指数

    \(B=\exp A\to B'=A'B\)
    类似于对数,也可以在 \(O\left(n\log n\right)\) 时间内解决。

  • 相关阅读:
    Hadoop整理二(Hadoop分布式存储系统HDFS)
    Hadoop整理一(初识Hadoop)
    Unalignable boolean Series provided as indexer (index of the boolean Series and of the indexed object do not match
    Oracle登录
    神经网络一(用tensorflow搭建简单的神经网络并可视化)
    Qt程序启动画面播放(gif与swf两种动画格式)
    VS2008+GDI实现多幅图像的GIF动画制作
    C++读取特定路径下文件目录及文件名称
    求助——数据处理问题
    VC6.0读取Excel文件数据
  • 原文地址:https://www.cnblogs.com/bestlxm/p/13096595.html
Copyright © 2011-2022 走看看