首页 > 其他 > 详细

伯努利数

时间:2020-09-12 23:02:23      阅读:92      评论:0      收藏:0      [点我收藏+]

正整数幂与伯努利数

十分神仙。

考虑正整数幂:

\[\sum_{i=1}^n i^k \]

假设我们给定了 \(n\) 被要求求解 \(k=\{1,2,3...10^5\}\) 时的答案,怎么办( \(n\) 非常大 )。

考虑一个构造,我们构造 \(\mathbf{EGF}\) 来计算答案,设 \(S_k(n)=\sum_{i=1}^n i^k\),我们构造 \(\mathbf{EGF}\) 为:

\[G_n(x)=\sum_{i=0}^n S_i(n)\frac{x^i}{i!} \]

容易注意到:

\[\begin{aligned} &G_n(x)=\sum_{i=0}^n \sum_{j=1}^n j^i \frac{x^i}{i!} \\&=\sum_{j=1}^n \sum_{i=0}^n j^i\frac{x^i}{i!} \\&=\sum_{j=1}^n e^{jx} \end{aligned}\]

然后考虑

\[\begin{aligned} &(1-e^{-x})G_n(x)=\sum_{j=1}^n e^{jx}-\sum_{j=0}^{n-1}e^{jx} \\&\implies (1-e^{-x})G_n(x)=e^{nx}-1 \\&\implies G_n(x)=\frac{e^{nx}-1}{1-e^{-x}} \end{aligned}\]

那么直接展开分子,然后求个分母的逆即可,复杂度 \(\mathcal O(k\log k)\)


对于某个具体的 \(k\) 考虑快速的求解此多项式:

考虑构造,假设能够将 \(G_n(x)\) 表示为两个多项式的卷积,同时其中一个恰好为以 \(n\) 的次幂为系数的多项式,那么我们容易得到系数即卷积结果,换而言之得到其多项式表达式。

事实上,我们注意到:

\[\begin{aligned} &G_n(x)=\frac{e^{nx}-1}{1-e^{-x}} \\&\implies G_n(x)=\frac{e^{(n+1)x}-e^x}{e^x-1} \\&\implies G_n(x)=\bigg(\frac{xe^x}{e^x-1}\bigg)\cdot \bigg(\frac{e^{nx}-1}{x}\bigg) \end{aligned}\]

注意到后者本质是 \(\mathbf{EGF}\{\frac{n}{1},\frac{n^2}{2},\frac{n^3}{3}...\frac{n^{i+1}}{i+1}\}\),请注意描述 \(\mathbf{EGF}\) 系数序列时默认除以 \(i!\)

然后考虑 \(\frac{xe^x}{e^x-1}\) 的展开式,我们认为其展开式的对应级数为 \(\mathbf{EGF}\{B_0,B_1...\}\)

所以我们得到:

\[\begin{aligned} &S_k(n)=\sum_{i+j=k} \binom{k}{i}B_i\frac{n^{j+1}}{j+1} \\&=\sum_{i=0}^k B_i\frac{k!}{i!(k-i)!}\frac{n^{k-i+1}}{k-i+1} \\&=\frac{1}{k+1}\sum_{i=0}^k B_i \frac{(k+1)!}{i!(k-i+1)!}n^{k-i+1} \\&=\frac{1}{k+1}\sum_{i=0}^k B_i\binom{k+1}{i}n^{k-i+1} \end{aligned}\]

这样就得到了 \(\sum_{i=0}^n i^k\) 这个关于 \(n\) 的多项式 \(S_k(n)\) 的通式了。


如何求解伯努利数

注意到伯努利数本质上是 \(\frac{xe^x}{e^x-1}\) 的展开式,所以求逆即可。

如何优雅的暴力

注意到:

\[\frac{xe^x}{e^x-1}\times \frac{e^{x}-1}{x}=e^x \]

所以 \(\mathbf{EGF}\{B_0,B_1...\}\times \mathbf{EGF}\{\frac{1}{1},\frac{1}{2},\frac{1}{3}...\}=\mathbf{EGF}\{1,1,1...\}\)

所以我们有:

\[\begin{aligned} &\sum_{i+j=k} B_i\times \frac{1}{j+1}\times \binom{k}{i}=1 \\& \sum_{i}^k B_i\times\binom{k+1}{i}=k+1 \end{aligned}\]

\(B_0=1\) 为边界,我们可以依次递推得到 \(B_i\),复杂度 \(\mathcal O(k^2)\)


例题:

给定 \(n\) 个数 \(a_{1\sim n}\) 以及常数 \(k\),求:

\[\sum_{i=1}^n \sum_{j=1}^{a_i} j^k \]

\(\rm Sol:\)

后者考虑通过伯努利数求得其展开多项式,我们所求变为:

\[\begin{aligned} &\sum_{i=1}^n \sum_{j=0}^{k+1} f_j\times a_i^j \\&= \sum_{j=0}^{k+1} f_j\sum_{i=1}^n a_i^j \end{aligned}\]

于是只需要求后者。

考虑构造多项式 \(F_i(x)=\sum_{j=0}^{\infty} a_i^j x^j\)

那么所求即 \(\sum F_i(x)\) 的系数序列,设为 \(G(x)\)

注意到 \(F_i(x)\) 显然可以收敛为 \(\frac{1}{1-a_ix}\),那么所求即:

\[\frac{\sum_i \sum_{j\ne i} (1-a_jx)}{\prod (1-a_ix)} \]

下面可以分治 NTT 处理,上面可以考虑组合意义,注意到下面计算式的 \([x^k]\) 处系数等价于从 \(n\) 个括号中选出 \(k\)\(-a_ix\) 的权值和,那么分子即选出 \(k\) 个后再从剩余的元素中删去一个方案数,所以有 \(f_i‘=f_i\times (n-i)\)

然后直接计算答案即可,复杂度 \(\mathcal O(n\log^2 n+k\log k)\)

伯努利数

原文:https://www.cnblogs.com/Soulist/p/13658922.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!