一般求法
一般求自然数幂和都会用到拉格朗日插值法,但仅当存在逆元的时候能用,给出一种用第二类斯特林数求自然数幂和的方法,时间复杂度是O(k2)O(k2)而不是O(k log k)O(k log k)的。
第二类斯特林数
众所周知,有
ik=∑j=0k{kj}ij–ik=∑j=0k{kj}ij_
于是乎我们有
F(n)=∑i=1nik=∑i=1n∑j=0k{kj}ij–F(n)=∑i=1nik=∑i=1n∑j=0k{kj}ij_
F(n)=∑i=1n∑j=0k{kj}j!(ij)F(n)=∑i=1n∑j=0k{kj}j!(ij)
F(n)=∑j=0k{kj}j!∑i=jn(ij)F(n)=∑j=0k{kj}j!∑i=jn(ij)
我们又有
∑i=jn(ij)=(n+1j+1)∑i=jn(ij)=(n+1j+1)
证明可以考虑组合意义,把nn+个数排成一排,考虑第一个选的数的位置,剩下的数中再选jj个,就能得到上面的式子。
当然也可以用此式子依次展开上式即可。
接着式子就变成了
F(n)=∑j=0k{kj}j!(n+1j+1)F(n)=∑j=0k{kj}j!(n+1j+1)
F(n)=∑j=0k{kj}(n+1)j+1––––j+1F(n)=∑j=0k{kj}(n+1)j+1_j+1
很明显(n+1)j+1––––j+1(n+1)j+1_j+1一定是整数,因此就不需要逆元了,第二类斯特林数用O(k2)O(k2)计算出来,时间复杂度O(k2)O(k2)。