有個Oier小學妹問了我一個Σi^k,i<=1e8 ,k<=1e6的問題,我認為這個用伯努利數列可能可以解決他的問題,所以整理了以下文章,給學弟學習學習~~~本人水平有限,也只能幫到這里了吧QAQ~~~
下面進入正文:
計算∑{i=1,n}i^k 的值需要引入伯努利數列的概念
定義將(B-1)^k展開,然后將B^k寫成數列的第k項,即B(k)
當k>=2時,令(B-1)^k展開后的形式(將B^k寫成B(k))與B(k)相等
(便於記憶相當於,令(B-1)^k=B^k,然后將B^k寫成B(k)求出各個項的值)
即可得出伯努利數列(即伯努利數)
例如
計算B(1)
令(B-1)^2=B^2
B^2-2B+1=B^2
將B^k寫成數列的第k項,即B(k)
有B(2)-2B(1)+1=B(2)
則B(1)=0.5
同理,若計算B(2)
令(B-1)^3=B^3
有
B^3-3B^2+3B-1=B^3
將B^k寫成數列的第k項
有
B(3)-3B(2)+3B(1)-1=B(3)
B(2)=[3B(1)-1]/3
即
B(2)=1/6
由此可算出數列的任意一項
定義B(0)=1
由上面所述:
(x+B)^(k+1)
=∑{i=0, k+1}C{i,k+1}B^i*x^(k+1-i)
=x^(k+1)+C{1,k+1}Bx^k+∑{i=2,k+1}C{i,k+1}*B^i*x^(k+1-i)
=x^(k+1)+0.5C{1,k+1}x^k+∑{i=2,k+1}C{i,k+1}*B^i*x^(k+1-i)
又
(x+B-1)^(k+1)
=∑{i=0, k+1}C{i,k+1}(B-1)^i*x^(k+1-i)
=x^(k+1)+C{1,k+1}(B-1)x^k+∑{i=2,k+1}C{i,k+1}*(B-1)^i*x^(k+1-i)
=x^(k+1)-0.5C{1,k+1}x^k+∑{i=2,k+1}C{i,k+1}*(B-1)^i*x^(k+1-i)
因為B(k)是伯努利數列
有
(B-1)^i=B^i
即
(x+B-1)^(k+1)
=x^(k+1)-0.5C{1,k+1}x^k+∑{i=2,k+1}C{i,k+1}*B^i*x^(k+1-i)
所以
(x+B)^(k+1)-(x+B-1)^(k+1)=(k+1)x^k
令x=1,2,3,…,i,…,n
有
(1+B)^(k+1)-B^(k+1)=(k+1)
(2+B)^(k+1)-(1+B)^(k+1)=(k+1)*2^k
(3+B)^(k+1)-(2+B)^(k+1)=(k+1)*3^k
……
(i+B)^(k+1)-(i-1+B)^(k+1)=(k+1)*i^k
……
(n+B)^(k+1)-(n-1+B)^(k+1)=(k+1)*n^k
由上式求和,得:
(n+B)^(k+1)-B^(k+1)=(k+1)∑{i=1,n}i^k
即
∑{i=1,n}i^k=[(n+B)^(k+1)-B^(k+1)]/(k+1)
注意:
這里的(n+B)^(k+1)並不代表(n+B)的k+1次冪
而是指的展開后將B^k寫成伯努利數列的第k項
就像前面說的一樣。想要嚴密的算法,就是歐拉
的算法,涉及到無窮級數,比較麻煩但非常嚴密。
本文所用的符號:
數列求和a(1)+a(2)+a(3)+…+a(n)表示為
∑{i=1,n}a(n)
從n個數中選出m個的組合數為
C{m,n}
以下是用Word整理的文本,我也不知道為啥有時候公式貼上來是錯誤的,所以怕看不清什么的,截個圖存一下,也方便自己查詢學習~












