狄利克雷生成函数

本篇讨论的所有函数都是积性函数。若 \(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/2}\right)\) 计算单个位置前缀和。如果在 \(\lt n^{0.4}\) 时对 \(\frac{1}{\zeta\left(2s\right)}\) 枚举,在 \(\gt n^{0.4}\) 时对 \(\zeta\left(s\right)\) 枚举同时对 \(\frac{1}{\zeta\left(2s\right)}\) 杜教筛,可以优化到 \(O\left(n^{0.4}\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)\) 时间内解决。

posted @ 2020-06-11 22:47  Binary_Search_Tree  阅读(1297)  评论(0编辑  收藏  举报