如何有效地求自然数的幂和

伯努利数 (Bernoulli numbers)是什么?
伯努利数不是一个常数,而是一串数列 B0 = 1, B1 = 1 / 2, B2 = 1 / 6, …

递推法

求自然数的幂和方法有很多种,首先是普通的递推求法:
基于二项式定理,我们有
在这里插入图片描述

a2 – b 2 = (a – b) · (a + b)
a3 – b 3 = (a – b) · (a2 + ab + b2)
a4 – b 4 = (a – b) · (a3 + a2b + ab2 + b3)

那么对于所有的 n = 1, 2, 3, … 累加得到
在这里插入图片描述
移项整理得:
在这里插入图片描述
可以看出这是一个递推式,如果我们记

那么得到如下递归式

递归出口是 k == 1
P1(n) = 1 + 2 + … + n = n · (n + 1) / 2
为了提高效率,在递归的时候需要记忆化


上面的式子还能再简化吗,我不知道,既然没有什么想法,那么我们试着将上面的推导进行推广

(n + 1)k – 1k+1 中 n + 1 换成 n + 2, 或者 n + 3 可不可以,不如用一个m来表示 (n + m)k

让n取1, 2,…,n,则



将上面的式子进行累加得:

用之前的记号简写为:

这里对n进行求导,因为把n作为变量,把m作为常量的话,就可以把Pk(m)消掉了
对变量n两边同时求导就有

把n = 0 代入就有

这样子就可以得到一个Pk的导数的简单的表达式,这就和我们想要的差不多了,我们想知道Pk(m)的导数表达式,我们只需要把它们在原点处的导数算出来即可,因为是多项式,所以在原点处的导数不就是Pi的一次项系数吗

因为我们的目标是要把Pk表示出来,两边同时积分不就可以了?
两边对m从0到n求积分有

我们记

数列一般是有通式,但有些像斐波那契数列则是给出递推关系式
我们想找到B0,B1,B2,…的递推式,然后再用这个递推式来定义Pk(n)这串数列,这样才方便计算
根据先前的讨论

把n = 1代入得:

根据组合数得性质:

整理得:

故:

我们把Bk提取出来:

整理得:

这就是我们要的递推关系式了:
在这里插入图片描述
在这里插入图片描述
因此也可以推导出Pk(n)
在这里插入图片描述
今天先更到这里…


参考链接:
https://www.bilibili.com/video/BV1Mt411g7MZ


版权声明:本文为weixin_45771864原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_45771864/article/details/115035105