问题描述
求一个满足 $K$ 阶齐次线性递推数列 $a_i$ 的第 $n$ 项,即:$a_n = \sum_{i=1}^k f_i \times a_{n-i}$.
分析
首先写成矩阵快速幂
$$\left( \begin{bmatrix} f_1 &f_2 &f_3 &f_4 & \cdots &f_{k-2} &f_{k-1} \\ 1 &0 &0 &0 & \cdots &0 &0 \\ 0 &1 &0 &0 & \cdots &0 &0\\ \cdots & \cdots& \cdots & \cdots & \cdots & \cdots & \cdots\\ 0 &0 &0 &0 & \cdots &1 &0 \end{bmatrix} \right) ^n \times \begin{bmatrix} a_{k-1} \\ a_{k-2} \\ \cdots \\ a_{1} \\ a_{0}\end{bmatrix} =\begin{bmatrix} a_{n+k-1} \\ a_{n+k-2} \\ \cdots \\ a_{n+1} \\ a_{n}\end{bmatrix}$$
所以我们只需要算出 $M^N \times A$,然后取最后一个数即可。
使用矩阵快速幂,复杂度 $O(k^3 \log_2n)$.
Carlay-Hamilton定理
设有 $k$ 个特征值的矩阵 $A$的特征多项式为 $f(\lambda ) =\prod_{i=1}^k(\lambda_i - x)$,则有 $f(A) = 0$,$0$ 为零矩阵。