形如 \(S_k(n)=\sum\limits_{i=0}^n i^k\) 的式子被稱為自然數冪和。
本文介紹了求自然數冪和的若干方法,其中包括斯特林數和伯努利數的一些應用,其中證明的推導過程也有一些推式子的技巧。
擾動法
應用兩次擾動法,當 \(k \geqslant 1\) 時,得:
\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k \\ &=\sum_{i=0}^n(i+1)^k-(n+1)^k \\ &=\sum_{i=0}^n\sum_{j=0}^k\binom{k}{j}i^j-(n+1)^k \\ &=\sum_{j=0}^k\binom{k}{j}S_j(n)-(n+1)^k \\ &=\sum_{j=0}^{k-2}\binom{k}{j}S_j(n)+kS_{k-1}(n)+S_k(n)-(n+1)^k \\ \end{aligned} \]
得:
\[\large\begin{aligned} S_{k-1}(n)&=\frac{(n+1)^k-\sum\limits_{j=0}^{k-2}\binom{k}{j}S_j(n)}{k} \\ S_k(n)&=\frac{(n+1)^{k+1}-\sum\limits_{j=0}^{k-1}\binom{k+1}{j}S_j(n)}{k+1} \\ \end{aligned} \]
直接計算可以做到 \(O(k^2)\)。分治 \(FFT\) 可以做到 \(O(k \log^2 k)\)。
拉格朗日插值法
由擾動法推得的式子,發現 \(S_k(n)\) 為 \(k+1\) 次多項式,因此可以考慮拉格朗日插值法,代入 \((0,S_k(0)),(1,S_k(1)),\dots,(k+1,S_k(k+1))\) 這 \(k+2\) 個點值,得:
\[\large\begin{aligned} f(x) &= \sum_{i = 0}^{k+1} y_i \prod_{i \not = j} \frac{x - x_j}{x_i - x_j} \\ S_k(n) &= \sum_{i = 0}^{k+1} S_k(i) \prod_{i \not = j} \frac{n - j}{i - j} \\ \end{aligned} \]
因為取值是連續的,后一項中的分子和分母可以分別計算,預處理后可以實現復雜度為 \(O(k)\)。
考慮如何計算 \(S_k(i)\),對於 \(i^k\) 可以進行線性篩,每個素數暴力快速冪,因為小於等於 \(n\) 的素數個數約為 \(\frac{n}{\ln n}\),得復雜度為 \(O(\frac{k}{\ln k}\log k)=O(k)\)。
因此總復雜度為 \(O(k)\)。
例題:The Sum of the k-th Powers
第一類斯特林數
\[\large x^{\overline{n}}=\sum_{i=0}^n\begin{bmatrix}n\\ i\end{bmatrix}x^i \]
通過組合意義即可證明,其也可以用歸納法證明:
已知:
\[\large x^{\overline{n-1}}=\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i \]
得:
\[\large\begin{aligned} x^{\overline{n-1}}&=\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i \\ (x+n-1)x^{\overline{n-1}}&=(x+n-1)\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i \\ x^{\overline{n}}&=(n-1)\sum_{i=0}^{n-1}\begin{bmatrix}n-1\\ i\end{bmatrix}x^i+\sum_{i=1}^{n}\begin{bmatrix}n-1\\ i-1\end{bmatrix}x^i \\ x^{\overline{n}}&=\sum_{i=0}^{n}\begin{bmatrix}n\\ i\end{bmatrix}x^i \\ \end{aligned} \]
代入得:
\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k \\ &=\sum_{i=0}^n(i^{\overline{k}}-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}i^j) \\ &=\sum_{i=0}^ni^{\overline{k}}-\sum_{i=0}^n\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}i^j \\ &=\sum_{i=0}^n\binom{i+k-1}{k}k!-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\ &=\binom{n+k}{k+1}k!-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\ &=\frac{(n+k)!}{(n-1)!(k+1)!}k!-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\ &=\frac{n^{\overline{k+1}}}{k+1}-\sum_{j=0}^{k-1}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\ \end{aligned} \]
直接計算可以做到 \(O(k^2)\)。不用保證模數存在逆元,\(k+1\) 一定是 \(n^{\overline{k+1}}\) 的約數。
應用歸納法可得:
\[\large x^{\overline{n}} = (-1)^n(-x)^{\underline{n}} \\ \large x^{\underline{n}} = (-1)^n(-x)^{\overline{n}} \\ \]
考慮對於 \(x^{\overline{n}} = (-1)^n(-x)^{\underline{n}}\),將其中 \(x\) 換為 \(-x\),得:
\[\large (-x)^{\overline{n}} = (-1)^nx^{\underline{n}} \]
因為有 \(x^{\overline{n}}=\sum\limits_{i=0}^n\begin{bmatrix}n\\ i\end{bmatrix}x^i\),得:
\[\large\begin{aligned} (-1)^nx^{\underline{n}} &= \sum\limits_{i=0}^n\begin{bmatrix}n\\ i\end{bmatrix}(-x)^i \\ x^{\underline{n}} &= \sum\limits_{i=0}^n(-1)^{n-i}\begin{bmatrix}n\\ i\end{bmatrix}x^i \\ \end{aligned} \]
應用這個式子也可以進行求解:
\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k \\ &=\sum_{i=0}^n(i^{\underline{k}}-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}i^j) \\ &=\sum_{i=0}^ni^{\underline{k}}-\sum_{i=0}^n\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}i^j \\ &=\sum_{i=0}^n\binom{i}{k}k!-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\ &=\binom{n+1}{k+1}k!-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\ &=\frac{(n+1)^{\underline{k+1}}}{k+1}-\sum_{j=0}^{k-1}(-1)^{k-j}\begin{bmatrix}k\\ j\end{bmatrix}S_j(n) \\ \end{aligned} \]
直接計算可以做到 \(O(k^2)\)。不用保證模數存在逆元,\(k+1\) 一定是 \((n+1)^{\underline{k+1}}\) 的約數。
第二類斯特林數
\[\large x^n = \sum_{i=0}^n \begin{Bmatrix} n \\i \end{Bmatrix} x^{\underline{i}} \]
通過組合意義即可證明,其也可以用歸納法證明:
已知:
\[\large x^{n-1} = \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} x^{\underline{i}} \]
得:
\[\large\begin{aligned} \large x^{n-1} &= \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} x^{\underline{i}} \\ \large x^n &= x\sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} x^{\underline{i}} \\ \large x^n &= \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} ix^{\underline{i}} +\sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} (x-i)x^{\underline{i}} \\ \large x^n &= \sum_{i=0}^{n-1} \begin{Bmatrix} n-1 \\i \end{Bmatrix} ix^{\underline{i}} +\sum_{i=1}^n \begin{Bmatrix} n-1 \\i-1 \end{Bmatrix} x^{\underline{i}} \\ \large x^n &= \sum_{i=0}^n \begin{Bmatrix} n \\i \end{Bmatrix} x^{\underline{i}} \\ \end{aligned} \]
代入得:
\[\large\begin{aligned} S_k(n)&=\sum_{i=0}^ni^k \\ &=\sum_{i=0}^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=0}^n i^{\underline{j}} \\ &=\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix}\sum_{i=0}^n \binom{i}{j}j! \\ &=\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix} \binom{n+1}{j+1}j! \\ &=\sum_{j=0}^k\begin{Bmatrix} k \\j \end{Bmatrix} \frac{(n+1)^{\underline{j+1}}}{j+1} \\ \end{aligned} \]
直接計算可以做到 \(O(k^2)\)。不用保證模數存在逆元,\(j+1\) 一定是 \((n+1)^{\underline{j+1}}\) 的約數。可以通過卷積 \(O(n \log n)\) 求出第二類斯特林數一行后快速求解。
伯努利數
伯努利數前幾項為 \(1,-\frac{1}{2},\frac{1}{6},0,-\frac{1}{30}\),其為非整數數列,其定義為:
\[\large \sum_{i=0}^{n}\binom{n+1}{i}B_i=[n=0] \]
可以進行 \(O(n^2)\) 遞推求伯努利數。還可以通過生成函數快速求伯努利數,得:
\[\large\begin{aligned} \sum_{i=0}^{n}\binom{n+1}{i}B_i&=[n=0] \\ \sum_{i=0}^{n+1}\binom{n+1}{i}B_i&=B_{n+1}+[n=0] \\ \sum_{i=0}^{n}\binom{n}{i}B_i&=B_{n}+[n=1] \\ \end{aligned} \]
發現左邊為伯努利數的指數生成函數和指數生成函數 \(e^x\) 的卷積,得:
\[\large\begin{aligned} B(x)e^x &= B(x) + x \\ B(x) &= \frac{x}{e^x-1} \\ \end{aligned} \]
可以多項式求逆實現 \(O(n \log n)\) 求伯努利數。
這里設 \(S_k(n)=\sum\limits_{i=0}^{n-1}i^k\),伯努利數為自然數冪和對應的多項式的系數:
\[\large S_k(n)=\frac{1}{k+1}\sum_{i=0}^k\binom{k+1}{i}B_in^{k+1-i} \]
考慮證明,設 \(F(x)\) 為 \(S_k(n)\) 的生成函數,得:
\[\large\begin{aligned} F(x) &= \sum_{i \geqslant 0} \frac{S_i(n)}{i!}x^i \\ &= \sum_{i \geqslant 0}\sum_{j=0}^{n-1} j^i \frac{x^i}{i!} \\ &= \sum_{j=0}^{n-1}\sum_{i \geqslant 0} \frac{(jx)^i}{i!} \\ &= \sum_{j=0}^{n-1}e^{jx} \\ &= \frac{e^{nx}-1}{e^x-1} \\ &= B(x)\frac{e^{nx}-1}{x} \\ &= B(x)\frac{\sum\limits_{i \geqslant 1} \frac{(nx)^i}{i!}}{x} \\ &= B(x) \sum_{i \geqslant 0} \frac{n^{i+1}x^i}{(i+1)!}\\ \end{aligned} \]
因為 \(\left [x^k\right ]F(x)=\frac{S_k(n)}{k!}\),得:
\[\large\begin{aligned} S_k(n) &= k!\sum_{i = 0}^k \frac{B_in^{k+1-i}}{i!(k+1-i)!} \\ S_k(n) &= \frac{1}{k+1}\sum_{i=0}^k\binom{k+1}{i}B_in^{k+1-i} \\ \end{aligned} \]
應用伯努利數可以求出自然數冪和對應的多項式的系數。