Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstddef>
- #include <cassert>
- #include <iostream>
- using namespace std;
- const size_t N = 4;
- long long A[N][N + 1] = {
- {-7, 4, -14, 18, 0},
- {9, -5, 18, -23, -3},
- {-2, 2, -4, 6, -9},
- {-8, -7, -16, 9, 0}
- };
- long long gcd(long long a, long long b) {
- while (b) {
- a %= b;
- swap(a, b);
- }
- return a;
- }
- void solve(size_t I, size_t J) {
- if (I == N) return;
- size_t L = -1;
- for (size_t i = I; i < N; ++i)
- if (L == -1 && A[i][J]) L = i;
- if (L == -1) return;
- for (size_t i = I; i < N; ++i) {
- if (i == L || !A[i][J]) continue;
- long long k1 = A[L][J];
- long long k2 = A[i][J];
- long long g = gcd(k1, k2);
- k1 /= g;
- k2 /= g;
- for (size_t j = J; j <= N; ++j) {
- A[i][j] *= k1;
- A[i][j] -= k2 * A[L][j];
- }
- }
- solve(I + 1, J + 1);
- }
- int main() {
- solve(0, 0);
- for (size_t i = 0; i < N; ++i) {
- for (size_t j = 0; j <= N; ++j)
- printf("%lld ", A[i][j]);
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement