这个式子有什么作用呢?
下面就必须要介绍快速幂了。
对于一个a^b的式子,显然的有a^b=[a^(b/2)]*[a^(b/2)]
那么我们就可以用分治算法在O(kloga)的时间内计算出A^a的值了(k是矩阵乘法的时间)
给出c++代码
struct
jz{
int da[2][2];
};
jz quick(int b)
{
if(b==1)
return A;
if(b==0)
return C;
int je=b%2;
jz tu=quick(b/2);
if(je==0)
return tu*tu;
else
return tu*tu*A;
}
C矩阵=
矩阵乘法的算符重载就不写了……
注意到对于这样的小矩阵,k完全可以被视作常数隐藏在O记号中
那么我们就得到了一个O(loga)的算法!