第二类斯特林数与自然数幂和

一般求法

一般求自然数幂和都会用到拉格朗日插值法,但仅当存在逆元的时候能用,给出一种用第二类斯特林数求自然数幂和的方法,时间复杂度是 O(k2) O ( k 2 ) 而不是 O(k log k) O ( k   l o g   k ) 的。

第二类斯特林数

众所周知,有

ik=j=0k{kj}ij i k = ∑ j = 0 k { k j } i j _

于是乎我们有
F(n)=i=1nik=i=1nj=0k{kj}ij F ( n ) = ∑ i = 1 n i k = ∑ i = 1 n ∑ j = 0 k { k j } i j _

F(n)=i=1nj=0k{kj}j!(ij) F ( n ) = ∑ i = 1 n ∑ j = 0 k { k j } j ! ( i j )

F(n)=j=0k{kj}j!i=jn(ij) F ( n ) = ∑ j = 0 k { k j } j ! ∑ i = j n ( i j )

我们又有

i=jn(ij)=(n+1j+1) ∑ i = j n ( i j ) = ( n + 1 j + 1 )

证明可以考虑组合意义,把 n n +1个数排成一排,考虑第一个选的数的位置,剩下的数中再选 j j 个,就能得到上面的式子。
当然也可以用(ij)=(i1j1)+(i1j)此式子依次展开上式即可。

接着式子就变成了

F(n)=j=0k{kj}j!(n+1j+1) F ( n ) = ∑ j = 0 k { k j } j ! ( n + 1 j + 1 )

F(n)=j=0k{kj}(n+1)j+1j+1 F ( n ) = ∑ j = 0 k { k j } ( n + 1 ) j + 1 _ j + 1

很明显 (n+1)j+1j+1 ( n + 1 ) j + 1 _ j + 1 一定是整数,因此就不需要逆元了,第二类斯特林数用 O(k2) O ( k 2 ) 计算出来,时间复杂度 O(k2) O ( k 2 )

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值