【矩阵快速幂】

来源:互联网 发布:讯飞语音输入法 mac 编辑:程序博客网 时间:2024/06/14 07:12

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;}
原创粉丝点击