[HDU 6758] Integral Calculus 的一种推式子方法

一个有趣的生成函数推导问题

暑假总算是有时间来继续看看《具体数学》,发现提到了 ζ\zeta 函数,于是就想起去年多校有一道比较神仙但我并不是很会的题。今天在翻出来看看,貌似找到了一种相对自然的推导过程。

题目大意

给定 NN,计算

0+τ4N1e1/τ1dτ(0+τ2N1e1/τ1dτ)2 \dfrac{ \displaystyle\int_{0}^{+\infty} \frac{\tau^{-4N-1}}{e^{1/\tau} - 1} \text{d}\tau }{ \left( \displaystyle\int_{0}^{+\infty} \frac{\tau^{-2N-1}}{e^{1/\tau} - 1} \text{d}\tau \right)^2 }

的值。可以证明结果是一个有理数。

1N1051 \leq N \leq 10^5,共 10510^5 组询问。

题解

前期的算式推导相对简单,直到得到这样一个式子

ζ(4N)(4N1)!(ζ(2N)(2N1)!)2 \frac{\zeta(4N)(4N−1)!}{(\zeta(2N)(2N−1)!)^2}

问题就集中在如何求 ζ(4N)\zeta(4N) 以及 ζ(2N)\zeta(2N) 上。

实际上 Riemann ζ\zeta 函数在奇数处的取值不是很妙,因此我们只考虑偶数部分的生成函数

G(z)=n1ζ(2n)z2n=n1k11k2nz2n=k1z2k2z2 \begin{align*} G(z) &= \sum_{n \geq 1} \zeta(2n) z^{2n} = \sum_{n \geq 1} \sum_{k \geq 1} \frac{1}{k^{2n}}z^{2n} \newline &= \sum_{k \geq 1} \frac{z^2}{k^2−z^2} \end{align*}

接下来是整个推导过程中最精彩的一段——

G(z)=k1z2k2z2=12zk12zz2k2=12zk1ddxlog(z2k2)=12zddxlog(k1(z2k2)) \begin{align*} G(z) &= \sum_{k \geq 1} \frac{z^2}{k^2−z^2} \newline &= − \frac{1}{2} z \cdot \sum_{k \geq 1} \frac{2z}{z^2−k^2} = − \frac{1}{2} z \cdot \sum_{k \geq 1} \frac{\text{d}}{\text{d}x} \log (z^2−k^2) \newline &= − \frac{1}{2} z \cdot \frac{\text{d}}{\text{d}x} \log \left( \prod_{k \geq 1} (z^2−k^2) \right) \end{align*}

数学分析告诉我们 sinx=xk1(z2k2π2)\sin x = x \prod_{k \geq 1} (z^2−k^2\pi^2),这个乘积和上式就差了一个 π2\pi^2,同时常识告诉我们 ζ(2N)\zeta(2N) 一定是某个有理数乘上 π2N\pi^{2N} 的形式,因此不妨把 GG 的定义改为 ζ(2N)π2N\zeta(2N)\pi^{-2N} 的生成函数。经过类似的推导过程,我们得到

G(z)=n1ζ(2n)π2nz2n=12zddzlogsinzz=12(1zcotz) G(z) = \sum_{n \geq 1} \frac{\zeta(2n)}{\pi^{2n}}z^{2n} = − \frac{1}{2} z \cdot \frac{\text{d}}{\text{d}z} \log \frac{\sin z}{z} = \frac{1}{2} ( 1 − z \cot z )

如果你写不出 xcotxx\cot x 的 Taylor 展开式 (实际上也不太可能写出来),可以用 cosx\cos xx1sinxx^{-1}\sin x 相除求出结果。一次求逆一次乘积,总复杂度 O(NlogN)\mathcal{O}(N \log N)

进一步探索

做到上边那一步其实已经可以算是完了。但我们还想继续推点东西出来。

复变函数告诉我们 cotz=ie2zi+1e2zi1\cot z = i \cdot \frac{e^{2zi}+1}{e^{2zi}−1},因此

zcotz=zie2zi+1e2zi1=zi+2zie2zi1 z \cot z = zi \cdot \frac{e^{2zi}+1}{e^{2zi}−1} = zi + \frac{2zi}{e^{2zi}−1}

后面那一项看起来很眼熟,因为它就是 Bernoulli 数的 EGF。注意到 Bernoulli 数仅在 1 一个奇数的取值非零,因此有

xex1=n1Bnn!xn=B1x+k1B2k(2k)!x2k \frac{x}{e^x−1} = \sum_{n \geq 1} \frac{B_n}{n!}x^n = B_1 x + \sum_{k \geq 1} \frac{B_{2k}}{(2k)!}x^{2k}

x=2zix=2zi 代入上式,得到

2zie2zi1=zi+k1B2k(2k)!(4)kz2k \frac{2zi}{e^{2zi}−1} = −zi + \sum_{k \geq 1} \frac{B_{2k}}{(2k)!}(−4)^k z^{2k}

一切都联系了起来。也就是说,我们最终的结论是

12G(z)=zcotz=k1B2k(2k)!(4)kz2k 1 − 2G(z) = z\cot z = \sum_{k \geq 1} \frac{B_{2k}}{(2k)!}(−4)^k z^{2k}

对比两边 z2kz^{2k} 的系数,有

ζ(2k)=(1)k+1B2k(2π)2k2(2k)! \zeta(2k) = \frac{(−1)^{k+1}B_{2k} (2 \pi)^{2k}}{2(2k)!}

至此,我们也可以通过预处理 Bernoulli 数计算结果。需要的操作仅剩一次求逆,但时间复杂度仍然是 O(NlogN)\mathcal{O}(N \log N)

后记

至于官方题解里里提到的

k1xk(2k)!=(k0xk(2k+1)!)(k1ζ(2k)π2k(1122k)(x)k) − \sum_{k \geq 1} \frac{x^k}{(2k)!} = \left( \sum_{k \geq 0} \frac{x^k}{(2k+1)!} \right) \left( \sum_{k \geq 1} \frac{\zeta(2k)}{\pi^{2k}} \left( 1 − \frac{1}{2^{2k}} \right) (−x)^k \right)

这个式子,确实也可以在 O(NlogN)\mathcal{O}(N \log N) 时间内做出答案,也不知道朝鲜那群出题人是怎么找到这个式子的……

ぶちまけちゃおうか 星に!
使用 Hugo 构建
主题 StackJimmy 设计