专栏文章

整数gauss消元(辗转相除)

算法·理论参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip3bmm2
此快照首次捕获于
2025/12/03 05:28
3 个月前
此快照最后确认于
2025/12/03 05:28
3 个月前
查看原文
用的时候注意改 数组大小 和 n,如果题目有取模记得加取模。
CPP
int 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 条评论,欢迎与作者交流。

正在加载评论...