矩阵

矩阵

//从a[1][1]存到a[n][n],n等于矩阵的长宽
struct Matrix {
    ll mat[N][N];
    Matrix operator * (const Matrix& b)const {
        Matrix ans;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= n; j++) {
                ans.mat[i][j] = 0;
                for (int k = 1; k <= n; k++) {
                    if (mat[i][k] && b.mat[k][j]) {
                        ans.mat[i][j] += mat[i][k] * b.mat[k][j];
                        ans.mat[i][j] %= mod;
                    }
                }
            }
        }
        return ans;
    }
};

Matrix q_pow(Matrix a, int b) {
    Matrix ans;
    memset(ans.mat, 0, sizeof(ans));
    for (int i = 1; i <= n; i++) {
        ans.mat[i][i] = 1;
    }
    while (b) {
        if (b & 1)
            ans = ans * a;
        b >>= 1;
        a = a * a;
    }
    return ans;
}

//封装

Last updated