假设现在要求 A^n
, 最简单的办法就是一个个连乘,可想而知,性能会比较低下。
一个简单的改进就可以减少连乘的次数,比如可以先求出 B = A^2
,然后求 B^(n/2)
这样就可以减少一半的
连乘次数了。但是有没有更好的办法呢,答案是有。
比如要求 A^156
,因为 156 二进制表示为 10011100,所以原式转换为求 (A^4)*(A^8)*(A^16)*(A^128)
,后面的矩阵都可
根据前面的矩阵来求得,所以就可以大大降低连乘的次数了。
1 | Mat operator ^ (Mat a, int k) { |