// 规定矩阵都从下标1开始 #define maxn 1000 // 创建的矩阵大小maxn*maxn const int mod = 1e9 + 7;// 模数 int mlen;// 矩阵大小(一般为方阵) long long k;// k次幂 struct mat{// 用结构体存矩阵,方便二维数组传址 long long s[maxn][maxn]; mat(){ memset(s, 0, sizeof(s)); }// 初始化为0 inline void unit(int mlen) {// 初始化为单位矩阵(对角线为1) for (int i = 1; i <= mlen; i++){ s[i][i] = 1; } } }; mat matmul(mat a, mat b) {// 矩阵乘法 mat c; for (int i = 1; i <= mlen; i++){ for (int j = 1; j <= mlen; j++){ for (int k = 1; k <= mlen; k++){ c.s[i][j] = (c.s[i][j] + a.s[i][k] * b.s[k][j]) % mod; } } } return c; } mat matpow(mat a, long long k){// 快速幂 mat temp; temp.unit(mlen); while (k){ if (k&1){ temp = matmul(temp, a); } a = matmul(a, a); k >>= 1; } return temp; }
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/120049.html