一个没啥用的东西,权当加深对数论函数和狄利克雷卷积的理解。
定义
序列 {f1,f2,…}\{f_1,f_2,\dots\}{f1,f2,…} 的狄利克雷生成函数 DGF 定义为
f(s)=∑n=1∞fnnsf(s)=\sum_{n=1}^{\infin}\frac{f_n}{n^s}f(s)=n=1∑∞nsfn
这里不要求 fff 是积性函数。
显然两个序列的狄利克雷卷积的 DGF 等于它们 DGF 的乘积。
为什么 nsn^sns 要写在下面?
本质上写上面也没啥区别,但是在这之前有个叫黎曼的数学家整了个叫 Zeta 的函数(马上就会讲到),为了让收敛的形式好看一点就定义成了分数。后来大家就沿用了这一习惯。
本文中为了方便起见,可能会混用 n−sn^{-s}n−s 的写法。
黎曼 Zeta 函数
黎曼 Zeta 函数定义为
ζ(s)=∑n=1∞1ns\zeta (s)=\sum_{n=1}^{\infin}\frac1 {n^s}ζ(s)=n=1∑∞ns1
对就是那个臭名昭著的猜想里面的那个函数。
不难看出 Zeta 函数是恒等函数 I(n)=1I(n)=1I(n)=1 的 DGF,这和 OGF 的 11−x\frac 1{1-x}1−x1,EGF 的 exe^xex 有着同样的地位,是 DGF 理论的基石。
DGF 与积性函数
既然是狄利克雷卷积,我们希望这个能与积性函数的理论扯上关系。
以 Zeta 函数为例,我们把每个 nnn 质因数分解,然后考虑每个质数 ppp 的贡献,不难得到
ζ(s)=∏p∈prime∑i=0∞1pis=∏p∈prime11−p−s\zeta(s)=\prod_{p\in prime}\sum_{i=0}^{\infin}\frac 1{p^{is}}\\=\prod_{p\in prime}\frac{1}{1-p^{-s}}ζ(s)=p∈prime∏i=0∑∞pis1=p∈prime∏1−p−s1
其他积性函数也可以用类似方法转成一个伪封闭形式。
常见数论函数函数的 DGF
- 莫比乌斯函数 μ\muμ
∏p∈prime(1−p−s)=1ζ(s)\prod_{p\in prime}(1-p^{-s})=\frac 1{\zeta (s)}p∈prime∏(1−p−s)=ζ(s)1
莫比乌斯反演有四种证法,你都知道么
- id(n)=nid(n)=nid(n)=n
∑i=1∞nns=∑i=1∞1ns−1=ζ(s−1)\sum_{i=1}^{\infin}\frac{n}{n^s}=\sum_{i=1}^{\infin}\frac 1{n^{s-1}}=\zeta(s-1)i=1∑∞nsn=i=1∑∞ns−11=ζ(s−1)
类似的有 kkk 次幂函数 idk(n)=nkid_k(n)=n^kidk(n)=nk 的 DGF 是 ζ(s−k)\zeta(s-k)ζ(s−k)
- 欧拉函数 φ\varphiφ
∏p∈prime(1+∑i=1∞(p−1)pi−1pis)=∏p∈prime(1+∑i=1∞pi−pi−1pis)=∏p∈prime(1+∑i=1∞pi(1−s)−∑i=1∞pi(1−s)−1)=∏p∈prime(1+p1−s1−p1−s−p−s1−p1−s)=∏p∈prime(1+p1−s−p−s1−p1−s)=∏p∈prime1−p−s1−p1−s=ζ(s−1)ζ(s)\prod _{p\in prime}\left(1+\sum_{i=1}^{\infin}\frac{(p-1)p^{i-1}}{p^{is}}\right)\\=\prod _{p\in prime}\left(1+\sum_{i=1}^{\infin}\frac{p^i-p^{i-1}}{p^{is}}\right)\\=\prod _{p\in prime}\left(1+\sum_{i=1}^{\infin}p^{i(1-s)}-\sum_{i=1}^{\infin}p^{i(1-s)-1}\right)\\=\prod _{p\in prime}\left(1+\frac{p^{1-s}}{1-p^{1-s}}-\frac{p^{-s}}{1-p^{1-s}}\right)\\=\prod _{p\in prime}\left(1+\frac{p^{1-s}-p^{-s}}{1-p^{1-s}}\right)\\=\prod _{p\in prime}\frac{1-p^{-s}}{1-p^{1-s}}\\=\frac{\zeta(s-1)}{\zeta(s)}p∈prime∏(1+i=1∑∞pis(p−1)pi−1)=p∈prime∏(1+i=1∑∞pispi−pi−1)=p∈prime∏(1+i=1∑∞pi(1−s)−i=1∑∞pi(1−s)−1)=p∈prime∏(1+1−p1−sp1−s−1−p1−sp−s)=p∈prime∏(1+1−p1−sp1−s−p−s)=p∈prime∏1−p1−s1−p−s=ζ(s)ζ(s−1)
- 约数个数 ddd: ζ2(s)\zeta^2(s)ζ2(s)
- 约数和 σ\sigmaσ:ζ(s)ζ(s−1)\zeta(s)\zeta(s-1)ζ(s)ζ(s−1)
然后你就可以发现一些类似于 “欧拉函数卷约数个数等于约数和” 的奇怪的东西。
DGF 乘法
和 DGF 没啥关系,直接用数论函数暴卷即可,复杂度是 O(nlogn)O(n\log n)O(nlogn) 的。
或者用一种类似高维前缀和的做法,可以做到 O(nloglogn)O(n\log\log n)O(nloglogn),不过没啥用。
DGF 除法
设数论函数(注意不是 DGF) F(n),G(n)F(n),G(n)F(n),G(n),求 HHH 使得 F=H∗GF=H*GF=H∗G
即
Fn=∑d∣nHdGndF_n=\sum_{d\mid n}H_d G_{\frac nd}Fn=d∣n∑HdGdn
HnG1=Fn−∑d∣n,d<nHdGndH_nG_1=F_n-\sum_{d\mid n,d<n}H_dG_{\frac nd}HnG1=Fn−d∣n,d<n∑HdGdn
算出一个 HnH_nHn 就暴力枚举倍数更新,复杂度是 O(nlogn)O(n\log n)O(nlogn)
DGF 求导与积分
对每一项
fnns\frac{f_n}{n^s}nsfn
对 sss 求导
−lnn⋅fnns-\ln n\cdot\frac{f_n}{n^s}−lnn⋅nsfn
积分
−1lnnfnns-\frac 1{\ln n}\frac{f_n}{n^s}−lnn1nsfn
n=1n=1n=1 要特殊处理一下。
这个 ln\lnln 不好搞,但我们的求导和积分都是成对出现的,这个 ln\lnln 一定可以用换底公式消掉,所以我们只需要维护它们的倍数关系就可以了。
也就是说,用来代替的 fff 只需要满足 f(1)=0,f(ab)=f(a)+f(b)f(1)=0,f(ab)=f(a)+f(b)f(1)=0,f(ab)=f(a)+f(b),且在大于 111 的数内不能有零点(否则一不小心除数就会变成 000)。可以用质因子次数和来实现。
连负号都不用加。
DGF 对数
ln(F(s))=∫F′(s)F(s)ds\ln (F(s))=\int \frac{F'(s)}{F(s)}dsln(F(s))=∫F(s)F′(s)ds
DGF 指数
G(s)=exp(F(s))G′(s)=F′(s)exp(F(s))=F′(s)G(s)G(s)=\exp(F(s))\\ G'(s)=F'(s)\exp(F(s))=F'(s)G(s) G(s)=exp(F(s))G′(s)=F′(s)exp(F(s))=F′(s)G(s)
设 F,GF,GF,G 对应的数论函数为 fn,gnf_n,g_nfn,gn。
设质因子个数函数为 cnc_ncn(用来代替 ln\lnln 的那个)
cngn=∑d∣ngndcdfdc_ng_n=\sum_{d\mid n}g_{\frac nd}c_df_dcngn=d∣n∑gdncdfd
d=1d=1d=1 的时候 cd=0c_d=0cd=0 没有贡献,和除法一样算出一个更新一个就可以了。
例题:「EC Final 2019」狄利克雷 k 次根 加强版
后面可能会写点更实际的应用,比如帮你一眼看出怎么卷杜教筛之类的。先咕着。