伯努利数
  
伯努利数 𝐵𝑛 是一个与数论有密切关联的有理数序列。前几项被发现的伯努利数分别为:
 是一个与数论有密切关联的有理数序列。前几项被发现的伯努利数分别为:
𝐵0 =1,𝐵1 = −12,𝐵2 =16,𝐵3 =0,𝐵4 = −130,…
等幂求和
伯努利数是由雅各布·伯努利的名字命名的,他在研究 𝑚 次幂和的公式时发现了奇妙的关系。我们记
 次幂和的公式时发现了奇妙的关系。我们记
𝑆𝑚(𝑛)=𝑛−1∑𝑘=0𝑘𝑚=0𝑚+1𝑚+⋯+(𝑛−1)𝑚 
伯努利观察了如下一列公式,勾画出一种模式:
𝑆0(𝑛)=𝑛𝑆1(𝑛)=12𝑛2−12𝑛𝑆2(𝑛)=13𝑛3−12𝑛2+16𝑛𝑆3(𝑛)=14𝑛4−12𝑛3+14𝑛2𝑆4(𝑛)=15𝑛5−12𝑛4+13𝑛3−130𝑛 
可以发现,在 𝑆𝑚(𝑛) 中 𝑛𝑚+1
 中 𝑛𝑚+1 的系数总是 1𝑚+1
 的系数总是 1𝑚+1 ,𝑛𝑚
,𝑛𝑚 的系数总是 −12
 的系数总是 −12 ,𝑛𝑚−1
,𝑛𝑚−1 的系数总是 𝑚12
 的系数总是 𝑚12 ,𝑛𝑚−3
,𝑛𝑚−3 的系数是 −𝑚(𝑚−1)(𝑚−2)720
 的系数是 −𝑚(𝑚−1)(𝑚−2)720 ,𝑛𝑚−4
,𝑛𝑚−4 的系数总是零等。
 的系数总是零等。
而 𝑛𝑚−𝑘 的系数总是某个常数乘以 𝑚𝑘――
 的系数总是某个常数乘以 𝑚𝑘―― ,𝑚𝑘――
,𝑚𝑘―― 表示下降阶乘幂,即 𝑚!(𝑚−𝑘)!
 表示下降阶乘幂,即 𝑚!(𝑚−𝑘)! 。
。
递推公式
𝑆𝑚(𝑛)=1𝑚+1(𝐵0𝑛𝑚+1+(𝑚+11)𝐵1𝑛𝑚+⋯+(𝑚+1𝑚)𝐵𝑚𝑛)=1𝑚+1𝑚∑𝑘=0(𝑚+1𝑘)𝐵𝑘𝑛𝑚+1−𝑘 
伯努利数由隐含的递推关系定义:
𝑚∑𝑗=0(𝑚+1𝑗)𝐵𝑗=0,(𝑚>0)𝐵0=1 
例如,(20)𝐵0 +(21)𝐵1 =0 ,前几个值显然是
,前几个值显然是
| 𝑛  | 0  | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | …  | 
| 𝐵𝑛  | 1  | −12  | 16  | 0  | −130  | 0  | 142  | 0  | −130  | …  | 
证明
利用归纳法证明
这个证明方法来自 Concrete Mathematics 6.5 BERNOULLI NUMBER。
运用二项式系数的恒等变换和归纳法进行证明:
𝑆𝑚+1(𝑛)+𝑛𝑚+1=𝑛−1∑𝑘=0(𝑘+1)𝑚+1=𝑛−1∑𝑘=0𝑚+1∑𝑗=0(𝑚+1𝑗)𝑘𝑗=𝑚+1∑𝑗=0(𝑚+1𝑗)𝑆𝑗(𝑛) 
令 ˆ𝑆𝑚(𝑛) =1𝑚+1∑𝑚𝑘=0(𝑚+1𝑘)𝐵𝑘𝑛𝑚+1−𝑘 ,我们希望证明 𝑆𝑚(𝑛) =ˆ𝑆𝑚(𝑛)
,我们希望证明 𝑆𝑚(𝑛) =ˆ𝑆𝑚(𝑛) ,假设对 𝑗 ∈[0,𝑚)
,假设对 𝑗 ∈[0,𝑚) ,有 𝑆𝑗(𝑛) =ˆ𝑆𝑗(𝑛)
,有 𝑆𝑗(𝑛) =ˆ𝑆𝑗(𝑛) 。
。
将原式中两边都减去 𝑆𝑚+1(𝑛) 后可以得到:
 后可以得到:
𝑆𝑚+1(𝑛)+𝑛𝑚+1=𝑚+1∑𝑗=0(𝑚+1𝑗)𝑆𝑗(𝑛)𝑛𝑚+1=𝑚∑𝑗=0(𝑚+1𝑗)𝑆𝑗(𝑛)=𝑚−1∑𝑗=0(𝑚+1𝑗)ˆ𝑆𝑗(𝑛)+(𝑚+1𝑚)𝑆𝑚(𝑛) 
尝试在式子的右边加上 (𝑚+1𝑚)ˆ𝑆𝑚(𝑛) −(𝑚+1𝑚)ˆ𝑆𝑚(𝑛) 再进行化简,可以得到:
 再进行化简,可以得到:
𝑛𝑚+1=𝑚∑𝑗=0(𝑚+1𝑗)ˆ𝑆𝑗(𝑛)+(𝑚+1)(𝑆𝑚(𝑛)−ˆ𝑆𝑚(𝑛)) 
不妨设 Δ =𝑆𝑚(𝑛) −ˆ𝑆𝑚(𝑛) ,并且将 ˆ𝑆𝑗(𝑛)
,并且将 ˆ𝑆𝑗(𝑛) 展开,那么有
 展开,那么有
𝑛𝑚+1=𝑚∑𝑗=0(𝑚+1𝑗)ˆ𝑆𝑗(𝑛)+(𝑚+1)Δ=𝑚∑𝑗=0(𝑚+1𝑗)1𝑗+1𝑗∑𝑘=0(𝑗+1𝑘)𝐵𝑘𝑛𝑗+1−𝑘+(𝑚+1)Δ 
将第二个 ∑ 中的求和顺序改为逆向,再将组合数的写法恒等变换可以得到:
 中的求和顺序改为逆向,再将组合数的写法恒等变换可以得到:
𝑛𝑚+1=𝑚∑𝑗=0(𝑚+1𝑗)1𝑗+1𝑗∑𝑘=0(𝑗+1𝑗−𝑘)𝐵𝑗−𝑘𝑛𝑘+1+(𝑚+1)Δ=𝑚∑𝑗=0(𝑚+1𝑗)1𝑗+1𝑗∑𝑘=0(𝑗+1𝑘+1)𝐵𝑗−𝑘𝑛𝑘+1+(𝑚+1)Δ=𝑚∑𝑗=0(𝑚+1𝑗)1𝑗+1𝑗∑𝑘=0𝑗+1𝑘+1(𝑗𝑘)𝐵𝑗−𝑘𝑛𝑘+1+(𝑚+1)Δ=𝑚∑𝑗=0(𝑚+1𝑗)𝑗∑𝑘=0(𝑗𝑘)𝐵𝑗−𝑘𝑘+1𝑛𝑘+1+(𝑚+1)Δ 
对两个求和符号进行交换,可以得到:
𝑛𝑚+1=𝑚∑𝑘=0𝑛𝑘+1𝑘+1𝑚∑𝑗=𝑘(𝑚+1𝑗)(𝑗𝑘)𝐵𝑗−𝑘+(𝑚+1)Δ 
对 (𝑚+1𝑗)(𝑗𝑘) 进行恒等变换:
 进行恒等变换:
(𝑚+1𝑗)(𝑗𝑘)=(𝑚+1𝑘)(𝑚−𝑘+1𝑗−𝑘) 
那么式子就变成了:
𝑛𝑚+1=𝑚∑𝑘=0𝑛𝑘+1𝑘+1𝑚∑𝑗=𝑘(𝑚+1𝑘)(𝑚−𝑘+1𝑗−𝑘)𝐵𝑗−𝑘+(𝑚+1)Δ=𝑚∑𝑘=0𝑛𝑘+1𝑘+1(𝑚+1𝑘)𝑚∑𝑗=𝑘(𝑚−𝑘+1𝑗−𝑘)𝐵𝑗−𝑘+(𝑚+1)Δ 
将所有的 𝑗 −𝑘 用 𝑗
 用 𝑗 代替,那么就可以得到:
 代替,那么就可以得到:
𝑛𝑚+1=𝑚∑𝑘=0𝑛𝑘+1𝑘+1(𝑚+1𝑘)𝑚−𝑘∑𝑗=0(𝑚−𝑘+1𝑗)𝐵𝑗+(𝑚+1)Δ 
考虑我们前面提到过的递归关系
𝑚∑𝑗=0(𝑚+1𝑗)𝐵𝑗=0,(𝑚>0)𝐵0=1𝑚∑𝑗=0(𝑚+1𝑗)𝐵𝑗=[𝑚=0]![\begin{aligned}
\sum_{j=0}^{m}\binom{m+1}{j}B_j&=0,(m>0)\\
B_0&=1\\
\sum_{j=0}^{m}\binom{m+1}{j}B_j&=[m = 0]
\end{aligned}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 
代入后可以得到:
𝑛𝑚+1=𝑚∑𝑘=0𝑛𝑘+1𝑘+1(𝑚+1𝑘)[𝑚−𝑘=0]+(𝑚+1)Δ=𝑚∑𝑘=0𝑛𝑘+1𝑘+1(𝑚+1𝑘)+(𝑚+1)Δ=𝑛𝑚+1𝑚+1(𝑚+1𝑚)+(𝑚+1)Δ=𝑛𝑚+1+(𝑚+1)Δ![\begin{aligned}
n^{m+1}&=\sum_{k=0}^{m}\frac{n^{k+1}}{k+1}\binom{m+1}{k}[m - k = 0]+(m+1)\Delta\\
&=\sum_{k=0}^{m}\frac{n^{k+1}}{k+1}\binom{m+1}{k}+(m+1)\Delta\\
&=\frac{n^{m+1}}{m+1}\binom{m+1}{m}+(m+1)\Delta\\
&=n^{m+1}+(m+1)\Delta
\end{aligned}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 
于是 Δ =0 ,且有 𝑆𝑚(𝑛) =ˆ𝑆𝑚(𝑛)
,且有 𝑆𝑚(𝑛) =ˆ𝑆𝑚(𝑛) 。
。
利用指数生成函数证明
对递推式 ∑𝑚𝑗=0(𝑚+1𝑗)𝐵𝑗 =[𝑚 =0]![\sum_{j=0}^{m}\binom{m+1}{j}B_j=[m=0]](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
两边都加上 𝐵𝑚+1 ,即得到:
,即得到:
𝑚+1∑𝑗=0(𝑚+1𝑗)𝐵𝑗=[𝑚=0]+𝐵𝑚+1𝑚∑𝑗=0(𝑚𝑗)𝐵𝑗=[𝑚=1]+𝐵𝑚𝑚∑𝑗=0𝐵𝑗𝑗!⋅1(𝑚−𝑗)!=[𝑚=1]+𝐵𝑚𝑚!![\begin{aligned}
\sum_{j=0}^{m+1}\binom{m+1}{j}B_j&=[m=0]+B_{m+1}\\
\sum_{j=0}^{m}\binom{m}{j}B_j&=[m=1]+B_{m}\\
\sum_{j=0}^{m}\dfrac{B_j}{j!}\cdot\dfrac{1}{(m-j)!}&=[m=1]+\dfrac{B_{m}}{m!}
\end{aligned}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 
设 𝐵(𝑧) =∑𝑖≥0𝐵𝑖𝑖!𝑧𝑖 ,注意到左边为卷积形式,故:
,注意到左边为卷积形式,故:
𝐵(𝑧)e𝑧=𝑧+𝐵(𝑧)𝐵(𝑧)=𝑧e𝑧−1 
设 𝐹𝑛(𝑧) =∑𝑚≥0𝑆𝑚(𝑛)𝑚!𝑧𝑚 ,则:
,则:
𝐹𝑛(𝑧)=∑𝑚≥0𝑆𝑚(𝑛)𝑚!𝑧𝑚=∑𝑚≥0𝑛−1∑𝑖=0𝑖𝑚𝑧𝑚𝑚! 
调换求和顺序:
𝐹𝑛(𝑧)=𝑛−1∑𝑖=0∑𝑚≥0𝑖𝑚𝑧𝑚𝑚!=𝑛−1∑𝑖=0e𝑖𝑧=e𝑛𝑧−1e𝑧−1=𝑧e𝑧−1⋅e𝑛𝑧−1𝑧 
代入 𝐵(𝑧) =𝑧e𝑧−1 :
:
𝐹𝑛(𝑧)=𝐵(𝑧)⋅e𝑛𝑧−1𝑧=(∑𝑖≥0𝐵𝑖𝑖!)(∑𝑖≥1𝑛𝑖𝑧𝑖−1𝑖!)=(∑𝑖≥0𝐵𝑖𝑖!)(∑𝑖≥0𝑛𝑖+1𝑧𝑖(𝑖+1)!) 
由于 𝐹𝑛(𝑧) =∑𝑚≥0𝑆𝑚(𝑛)𝑚!𝑧𝑚 ,即 𝑆𝑚(𝑛) =𝑚![𝑧𝑚]𝐹𝑛(𝑧)
,即 𝑆𝑚(𝑛) =𝑚![𝑧𝑚]𝐹𝑛(𝑧)![S_m(n)=m![z^m]F_n(z)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) :
:
𝑆×𝑚(𝑛)=𝑚![𝑧𝑚]𝐹𝑛(𝑧)=𝑚!𝑚∑𝑖=0𝐵×𝑖𝑖!⋅𝑛𝑚−𝑖+1(𝑚−𝑖+1)!=1𝑚+1𝑚∑𝑖=0(𝑚+1𝑖)𝐵𝑖𝑛𝑚−𝑖+1![\begin{aligned}
S \times m(n)&=m![z^m]F_n(z)\\
             &= m!\sum_{i=0}^{m}\dfrac{B \times i}{i!}\cdot\dfrac{n^{m-i+1}}{(m-i+1)!}\\
             &=\dfrac{1}{m+1}\sum_{i=0}^{m}\binom{m+1}{i}B_in^{m-i+1}
\end{aligned}](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7) 
故得证。
参考实现
|  1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 | using ll = long long;
constexpr int MAXN = 10000;
constexpr int mod = 1e9 + 7;
ll B[MAXN];        // 伯努利数
ll C[MAXN][MAXN];  // 组合数
ll inv[MAXN];      // 逆元(计算伯努利数)
void init() {
  // 预处理组合数
  for (int i = 0; i < MAXN; i++) {
    C[i][0] = C[i][i] = 1;
    for (int k = 1; k < i; k++) {
      C[i][k] = (C[i - 1][k] % mod + C[i - 1][k - 1] % mod) % mod;
    }
  }
  // 预处理逆元
  inv[1] = 1;
  for (int i = 2; i < MAXN; i++) {
    inv[i] = (mod - mod / i) * inv[mod % i] % mod;
  }
  // 预处理伯努利数
  B[0] = 1;
  for (int i = 1; i < MAXN; i++) {
    ll ans = 0;
    if (i == MAXN - 1) break;
    for (int k = 0; k < i; k++) {
      ans += C[i + 1][k] * B[k];
      ans %= mod;
    }
    ans = (ans * (-inv[i + 1]) % mod + mod) % mod;
    B[i] = ans;
  }
}
 | 
 
  
 
 
 
  本页面最近更新:2025/5/3 19:43:25,更新历史
  发现错误?想一起完善? 在 GitHub 上编辑此页!
  本页面贡献者:StudyingFather, Enter-tainer, ShaoChenHeng, Tiphereth-A, Aquistcev, c-forrest, Great-designer, Ir1d, kenlig, ksyx, OkazakiYumemi, Xeonacid
  本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用