1.21矩阵快速幂模板
typedef long long LL;
const int mod = ;
struct Matrix{
LL v[4][4];
};
Matrix multiply(Matrix x, Matrix y, int Matrix_len);/*矩阵乘法*/
Matrix matrix_pow(Matrix a, int k, int Matrix_len);/*矩阵快速幂*/
Matrix multiply(Matrix x, Matrix y, int Matrix_len){
Matrix z;
memset(z.v, 0, sizeof(z.v));
for(int i = 0; i < Matrix_len; i++){
for(int j = 0; j < Matrix_len; j++){
for(int k = 0; k < Matrix_len; k++){
z.v[i][j] += x.v[i][k] * y.v[k][j];
z.v[i][j] %= mod;
}
}
}
return z;
}
Matrix matrix_pow(Matrix a, int k, int Matrix_len){
Matrix b;
for(int i = 0; i < Matrix_len; i++){
for(int j = 0; j < Matrix_len; j++){
i == j? b.v[i][j] = 1: b.v[i][j] = 0;
}
}
while(k){
if(k & 1)
b = multiply(b, a, 2);
a = multiply(a, a, 2);
k >>= 1;
}
return b;
}