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 = 3;
- const size_t M = 7;
- long long A[N][M] = {
- {6, -4, 3, -1, 6, -2, 17},
- {19, 10, -3, 2, -16, -42, -61},
- {-5, -3, 1, 0, 6, 11, 18},
- };
- 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 < M; ++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 < M; ++j)
- printf("%lld ", A[i][j]);
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement