自然數冪和


首先我們從\(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)\),具體可見淺談算法——拉格朗日插值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM