自然数幂和

自然数幂和

O ( k 2 ) O(k^2) O(k2)递推做法

首先令 S ( n , k ) = ∑ i = 1 n i k S(n,k)=\sum_{i=1}^{n}i^k S(n,k)=i=1nik,那么我们把 S ( n , k + 1 ) S(n,k+1) S(n,k+1)给拆开,可以得到如下的方程:
S ( n , k + 1 ) = ∑ i = 1 n i k + 1 S ( n , k + 1 ) = ∑ i = 2 n ( i − 1 + 1 ) k + 1 + 1 S ( n , k + 1 ) = ∑ j = 0 k + 1 ( k + 1 j ) ∑ i = 1 n − 1 i j + 1 S ( n , k + 1 ) = ∑ j = 0 k + 1 ( k + 1 j ) ( S ( n , j ) − n j ) + 1 S ( n , k + 1 ) = ∑ j = 0 k − 1 ( k + 1 j ) ( S ( n , j ) − n j ) + ( k + 1 ) ( S ( n , k ) − n k ) + ( S ( n , k + 1 ) − n k + 1 ) + 1 ( k + 1 ) S ( n , k ) = n k + 1 + ( k + 1 ) n k − 1 − ∑ j = 0 k − 1 ( k + 1 j ) ( S ( n , j ) − n j ) S ( n , k ) = n k + 1 − ∑ j = 0 k − 1 ( k + 1 j ) ( S ( n , j ) − n j ) − 1 k + 1 + n k \begin{aligned} S(n,k+1) & =\sum_{i=1}^{n}i^{k+1} \\ S(n,k+1) & =\sum_{i=2}^{n}(i-1+1)^{k+1}+1\\ S(n,k+1) & =\sum_{j=0}^{k+1}\binom{k+1}{j}\sum_{i=1}^{n-1}i^j+1\\ S(n,k+1) & =\sum_{j=0}^{k+1}\binom{k+1}{j}(S(n,j)-n^j)+1\\ S(n,k+1) & =\sum_{j=0}^{k-1}\binom{k+1}{j}(S(n,j)-n^j)+(k+1)(S(n,k)-n^k)+(S(n,k+1)-n^{k+1})+1\\ (k+1)S(n,k) & =n^{k+1}+(k+1)n^k-1-\sum_{j=0}^{k-1}\binom{k+1}{j}(S(n,j)-n^j)\\ S(n,k)& =\frac{n^{k+1}-\sum_{j=0}^{k-1}\binom{k+1}{j}(S(n,j)-n^j)-1}{k+1}+n^k\\ \end{aligned} S(n,k+1)S(n,k+1)S(n,k+1)S(n,k+1)S(n,k+1)(k+1)S(n,k)S(n,k)=i=1nik+1=i=2n(i1+1)k+1+1=j=0k+1(jk+1)i=1n1ij+1=j=0k+1(jk+1)(S(n,j)nj)+1=j=0k1(jk+1)(S(n,j)nj)+(k+1)(S(n,k)nk)+(S(n,k+1)nk+1)+1=nk+1+(k+1)nk1j=0k1(jk+1)(S(n,j)nj)=k+1nk+1j=0k1(jk+1)(S(n,j)nj)1+nk
那么就可以递推了。

O ( k 2 ) O(k^2) O(k2)预处理,单次计算 O ( k ) O(k) O(k)

首先有第二类斯特林数普通幂转下降幂: x k = ∑ i = 0 k { n i } x i ‾ x^k=\sum_{i=0}^{k} \begin{Bmatrix}n\\i\end{Bmatrix}x^{\underline{i}} xk=i=0k{ni}xi

S ( n , k ) S(n,k) S(n,k)拆开:
S ( n , k ) = ∑ i = 1 n i k = ∑ i = 1 n ∑ j = 0 k { k j } i j ‾ = ∑ j = 0 k { k j } ∑ i = 1 n i j ‾ = ∑ j = 0 k { k j } ∑ i = 1 n ( i + 1 ) j + 1 ‾ − i j + 1 ‾ j + 1 = ∑ j = 0 k { k j } ( n + 1 ) j + 1 ‾ − 1 j + 1 \begin{aligned} S(n,k) & =\sum_{i=1}^{n}i^k\\ & = \sum_{i=1}^{n}\sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}i^{\underline{j}}\\ & = \sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}\sum_{i=1}^{n}i^{\underline{j}}\\ & = \sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}\sum_{i=1}^{n}\frac{(i+1)^{\underline{j+1}}-i^{\underline{j+1}}}{j+1}\\ & = \sum_{j=0}^{k}\begin{Bmatrix}k\\j\end{Bmatrix}\frac{(n+1)^{\underline{j+1}}-1}{j+1} \end{aligned} S(n,k)=i=1nik=i=1nj=0k{kj}ij=j=0k{kj}i=1nij=j=0k{kj}i=1nj+1(i+1)j+1ij+1=j=0k{kj}j+1(n+1)j+11
于是就可以轻松的计算了。

O ( k log ⁡ k ) O(k \log k) O(klogk)预处理出同一个 n n n 1 1 1 k k k次自然数幂和

还是推式子:
∑ i = 1 n i k = ∑ i = 0 n e i x [ x k k ! ] − [ k = 0 ] = [ x k k ! ] e ( n + 1 ) x − 1 e x − 1 − [ k = 0 ] \sum_{i=1}^{n} i^k =\sum_{i=0}^{n}e^{ix}[\frac{x^k}{k!}]-[k=0]=[\frac{x^k}{k!}]\frac{e^{(n+1)x}-1}{e^x-1}-[k=0] i=1nik=i=0neix[k!xk][k=0]=[k!xk]ex1e(n+1)x1[k=0]
上面这个式子关于 e e e的项直接展开即可,然后多项式求逆搞一下就没了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值