typedef long long ll;
ll mod = 1e9 + 7;
const int maxn = 10;
struct Matrix
{
long long a[maxn][maxn]; //矩阵
int n, m; //n为行数 m为列数
Matrix(int n, int m) //构造函数
{
memset(a, 0, sizeof(a)); //清空矩阵
this->n = n; //赋值行数
this->m = m; //赋值列数
}
static Matrix build(int n)
{ //生成一个单位矩阵
Matrix matrix(n, n);
for (int i = 0; i < n; i++)
{
matrix.a[i][i] = 1;
}
return matrix;
}
Matrix operator*(const Matrix &c) //乘号重载
{ //矩阵乘法 需要这个矩阵列数和另一个矩阵的行数相同才可
Matrix mul(n, c.m); //新建一个答案矩阵
for (int i = 0; i < n; i++) //矩阵乘法
{
for (int k = 0; k < m; k++)
{
for (int j = 0; j < c.m; j++)
{
mul.a[i][j] += (a[i][k] * c.a[k][j]);
mul.a[i][j] %= mod;
}
}
}
return mul;
}
};
Matrix quickpow(Matrix k, ll m) //快速幂
{
Matrix ans = k.build(k.n);
while (m > 0)
{
if (m & 1)
{
ans = ans * k;
}
m >>= 1;
k = k * k;
}
return ans;
}
矩阵
最新推荐文章于 2024-12-04 23:35:34 发布