专栏文章
整数gauss消元(辗转相除)
算法·理论参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip3bmm2
- 此快照首次捕获于
- 2025/12/03 05:28 3 个月前
- 此快照最后确认于
- 2025/12/03 05:28 3 个月前
用的时候注意改 数组大小 和 n,如果题目有取模记得加取模。
CPPint mat[10][10], ans[10];
inline void mul(int *a, int t) {
F(i, 1, n+1) a[i] *= t;
}
inline void sub(int *a, int *b, int t) {
F(i, 1, n+1) a[i] -= b[i]*t;
}
void gauss() {
F(k, 1, n) {
F(i, k, n) {
if (mat[i][k]) {
if (i != k) swap(mat[i], mat[k]);
break;
}
}
F(i, k+1, n) {
int *a = mat[k], *b = mat[i];
if (a[k] < 0) mul(a, -1);
if (b[k] < 0) mul(b, -1);
while (a[k]) {
if (a[k] > b[k]) swap(a, b);
sub(b, a, b[k]/a[k]);
swap(a, b);
}
swap(a, b);
}
}
G(i, n, 1) {
ans[i] = mat[i][n+1];
F(j, i+1, n) {
ans[i] -= ans[j]*mat[i][j];
}
ans[i] /= mat[i][i];
}
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...