ZTL — 数学 — 矩阵
zimindaada · · 个人记录
V1.0 矩阵限长宽相等,加减乘限长宽相等
const matrix_maxn = maxn;
struct matrix{
long long a[matrix_maxn][matrix_maxn];
matrix(){ //初始化
memset(a,0,sizeof(a));
}
inline void init(){//单位矩阵
for(int i = 1; i <= n; ++i) a[i][i] = 1;
}
};
//矩阵加
matrix operator +(const matrix &x, const matrix &y){
matrix ans_;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
ans_.a[i][j] = (x.a[i][j] + y.a[i][j]);
return ans_;
}
//矩阵减
matrix operator -(const matrix &x, const matrix &y){
matrix ans_;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
ans_.a[i][j] = (x.a[i][j] - y.a[i][j]);
return ans_;
}
//矩阵乘矩阵
matrix operator *(const matrix &x, const matrix &y){
matrix ans_;
for(int k = 1; k <= n; ++k)
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= n; ++j)
ans_.a[i][j] = (ans_.a[i][j] + x.a[i][k] * y.a[k][j]);
return ans_;
}
//矩阵快速幂
matrix mat_pow(matrix a, ll k){
matrix ans_; ans_.init();
while(k){
if(k&1) ans_ = ans_ * a;
a = a*a; k >>= 1;
}
return ans_;
}