矩阵快速幂
快速幂
求 a n a^n an.
显然,一种朴素的方法是:循环 n n n 次,将结果累乘,时间复杂度是 O ( n ) O(n) O(n) 。
可以考虑将 n n n 表示成二进制的形式:
n = a 0 ⋅ 2 0 + a 1 ⋅ 2 1 + … a n − 1 ⋅ 2 n − 1 + a n ⋅ 2 n , a i ∈ { 0 , 1 } n = a_0\cdot 2^0 + a_1\cdot 2^1 + \ldots a_{n-1}\cdot 2^{n-1} + a_n\cdot 2^n, a_i\in\{0, 1\} n=a0⋅20+a1⋅21+…an−1⋅2n−1+an⋅2n,ai∈{
0,1}
显然,序列 a n a n −