使用二分求矩阵n次幂
一、好处
时间复杂度为:log(n)
二、具体求法
使用java语言
int[][] pow(int[][] a,int n){
int ret[][]={{1,0},{0,1}};
while(n>0){
if((n&1)==1){
ret=multiply(ret,a);
}
n>>=1;
a=multiply(a,a);
}
return ret;
}
int[][] multiply(int[][] a,int[][] b){
int c[][]=new int[2][2];
c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0];
c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1];
c[1][0]=a[1][0]*b[0][0]+a[1][1]*b[1][0];
c[1][1]=a[1][0]*b[0][1]+a[1][1]*b[1][1];
return c;
}