自然数幂和小结
开个小坑,介绍自然数幂和(等幂求和)问题以及相关算法。
等幂求和问题
等幂求和问题(Faulhaber’s formula)1 指计算多项式
的值。
对于较小的情况:
- 当时有。
- 当时有。
插值法
使用插值法计算的主要方式是,先利用多项式的个点值得出该多项式的表示,然后用此表示来计算点值。
拉格朗日插值法
如果只是单点求值,那么可以直接利用拉格朗日多项式
来计算。单次求值的时间复杂度是。
如果取,那么在模意义下可以使用阶乘及其逆元来进一步优化,做到的时间计算点值。
如果要得到的系数表示,那么暴力模拟多项式展开的过程是的。
使用缺一背包的方式分治计算可以做到。
差分法
取()共个点,然后将其差分。
具体地,设,表示差分的次数,。那么有
这实际上是求出了的下降幂表示。利用斯特林数的变换:
我们也可以在的时间内将其转化为常幂系数表示。
二项式定理
利用二项式定理也可以计算等幂求和,其主要思想是通过差分、裂项等方法构造等式,推导递推式。首先
通过移项构造一个差分形式:
这样就能得到
然后我们再次移项得到的递推式:
所以整理一下得到
斯特林数
使用斯特林数计算等幂求和的要点在于构造递归式。由下降幂转通常幂的公式:
移项得到
所以我们把这个公式代入等幂求和公式得到
这样我们就可以递归求解了。
伯努利数
等幂求和也可以借助伯努利数2相关的知识计算。伯努利数序列并不具有直观含义,但其指数生成函数(EGF)为
为了推导等幂求和的系数表示,我们先介绍伯努利多项式的定义:
伯努利多项式实际上是一个序列,这个序列的每一个元素都是个多项式。
因此我们可以求出这个序列的指数生成函数(多项式序列的生成函数):
把写成下标是因为这个生成函数中作为主要的占位符。接下来我们推导其封闭形式:
接下来我们将其差分:
这对应的是序列的 EGF。将其展开得到
因此我们得到,即
我们将表示为了差分的形式,因此我们可以裂项相消:
这样我们就直接得到了的系数表示。
1. https://en.wikipedia.org/wiki/Faulhaber%27s_formula ↩
2. https://zh.wikipedia.org/zh-cn/%E4%BC%AF%E5%8A%AA%E5%88%A9%E6%95%B0 ↩
修订记录
- 2021年3月27日 第3次修订
- 2021年3月27日 第2次修订
- 2021年3月27日 创建文章