首先我們從\(n\)個整數的平方和開始,也就是求
\[S(n)=\sum\limits_{i=1}^ni^2 \]
我們可以嘗試對\(S(n)\)進行擾動,就有
\[\begin{align}S(n)&=\sum\limits_{i=1}^n(i+1)^2-(n+1)^2+1\nonumber\\&=\sum\limits_{i=1}^n(i^2+2i+1)-(n+1)^2+1\nonumber\\&=S(n)+2\sum\limits_{i=1}^ni-n(n+1)\nonumber\end{align} \]
然后我們發現擾動失敗了,\(S(n)\)被消掉了,但是我們意外發現了求\(\sum\limits_{i=1}^ni\)的公式
於是我們猜測一下,是否可以用更高級的冪和\(C(n)=\sum\limits_{i=1}^ni^3\)來求出\(S(n)\)
\[\begin{align}C(n)&=\sum\limits_{i=1}^n(i+1)^3-(n+1)^3+1\nonumber\\&=\sum\limits_{i=1}^n(i^3+3i^2+3i+1)-(n+1)^3+1\nonumber\\&=C(n)+3S(n)+\dfrac{3n(n+1)}{2}-n(n+1)(n+2)\nonumber\\\Longrightarrow S(n)&=\dfrac{n(n+1)(n+2)-\frac{3n(n+1)}{2}}{3}\nonumber\\&=\dfrac{n(n+1)(2n+1)}{6}\nonumber\end{align} \]
於是這樣我們得到了\(S(n)\)的公式,既然如此,我們可以嘗試着計算更高階的冪和,我們設\(S_k(n)=\sum\limits_{i=1}^ni^k\),那么有
\[\begin{align}S_k(n)&=\sum\limits_{i=1}^ni^k=\sum\limits_{i=1}^n(i+1)^k-(n+1)^k+1\nonumber\\&=\sum\limits_{i=1}^n\sum\limits_{j=0}^k\binom{k}{j}i^j-(n+1)^k+1\nonumber\\&=\sum\limits_{j=0}^k\binom{k}{j}S_j(n)-(n+1)^k+1\nonumber\end{align} \]
這樣就有
\[S_{k-1}(n)=\dfrac{(n+1)^k-\sum\limits_{j=0}^{k-2}\binom{k}{j}S_j(n)-1}{k} \]
或者可以寫成
\[S_k(n)=\dfrac{(n+1)^{k+1}-\sum\limits_{j=0}^{k-1}\binom{k+1}{j}S_j(n)-1}{k+1} \]
那么我們就可以在\(O(k^2)\)的時間內計算\(S_k(n)\)了
其實我們可以在\(O(k)\)的時間內求出\(S_k(n)\),具體可見淺談算法——拉格朗日插值
