二、线性代数
矩阵模板
namespace Matrix{
struct matrix{
int hang, lie;
vector <vector<int >> num;
matrix(int x = 0, int y = 0){
hang = x;
lie = y;
num.resize(x + 1);
for(int i = 1; i <= x; i ++)
num[i].resize(y + 1);
}
void out(){
for(int i = 1; i <= hang; i ++){
for(int j = 1; j <= lie; j ++)
cout << num[i][j] << " ";
cout << endl;
}
}
}no;
matrix E(int n){
matrix ret(n, n);
for(int i = 1; i <= n; i ++)
ret.num[i][i] = 1;
return ret;
}
matrix operator * (matrix a, matrix b){
matrix ret(a.hang, b.lie);
for(int i = 1; i <= ret.hang; i ++)
for(int j = 1; j <= ret.lie; j ++)
for(int k = 1; k <= a.lie; k ++)
ret.num[i][j] = (ret.num[i][j] + 1ll * a.num[i][k] * b.num[k][j]) % mod;
return ret;
}
matrix operator * (int k, matrix b){
matrix ret = b;
for(int i = 1; i <= b.hang; i ++)
for(int j = 1; j <= b.lie; j ++)
ret.num[i][j] = 1ll * k * b.num[i][j] % mod;
return ret;
}
matrix operator + (matrix a, matrix b){
matrix ret = a;
for(int i = 1; i <= a.hang; i ++)
for(int j = 1; j <= a.lie; j ++){
ret.num[i][j] = a.num[i][j] + b.num[i][j];
if(ret.num[i][j] >= mod) ret.num[i][j] -= mod;
}
return ret;
}
matrix quickpow(matrix x, int b){
if(b == 0) return E(x.lie);
if(b == 1) return x;
matrix l = quickpow(x, b >> 1);
l = l * l;
if(b & 1)
l = l * x;
return l;
}
}
高斯消元
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本