矩阵快速幂-模板
&思考:
这个就是可以用来解开m像递推式, 白书P200
&代码:
typedef vector<int> vec;
typedef vector<vec> mat;
mat mul(mat &A,mat& B)
{
//假设矩阵A是m*n B是n*h 那么C=A*B 是m*h
mat C(A.size(),vec(B[0].size()));
for(int i=0;i<A.size();i++)
for(int k=0;k<B.size();k++)
for(int j=0;j<B[0].size();j++){
C[i][j]=(C[i][j]+A[i][k]*B[k][j]);
}
return C;
}
//求矩阵A的n次方 即A^n
mat bin_pow(mat A,ll n)
{
//单位矩阵B
mat B(A.size(),vec(A.size());
for(int i=0;i<A.size();i++){
B[i][i]=1;
}
while(n>0){
if(n&1) B=mul(B,A);
A=mul(A,A);
n>>=1;
}
return B;
}