Advertisement
Gornak40

Gauss 5a

Oct 7th, 2022
817
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include <cstddef>
  2. #include <cassert>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. const size_t N = 4;
  8.  
  9. long long A[N][N + 1] = {
  10.     {-7, 4, -14, 18, 0},
  11.     {9, -5, 18, -23, -3},
  12.     {-2, 2, -4, 6, -9},
  13.     {-8, -7, -16, 9, 0}
  14. };
  15.  
  16. long long gcd(long long a, long long b) {
  17.     while (b) {
  18.         a %= b;
  19.         swap(a, b);
  20.     }
  21.     return a;
  22. }
  23.  
  24. void solve(size_t I, size_t J) {
  25.     if (I == N) return;
  26.     size_t L = -1;
  27.     for (size_t i = I; i < N; ++i)
  28.         if (L == -1 && A[i][J]) L = i;
  29.     if (L == -1) return;
  30.     for (size_t i = I; i < N; ++i) {
  31.         if (i == L || !A[i][J]) continue;
  32.         long long k1 = A[L][J];
  33.         long long k2 = A[i][J];
  34.         long long g = gcd(k1, k2);
  35.         k1 /= g;
  36.         k2 /= g;
  37.         for (size_t j = J; j <= N; ++j) {
  38.             A[i][j] *= k1;
  39.             A[i][j] -= k2 * A[L][j];
  40.         }
  41.     }
  42.     solve(I + 1, J + 1);
  43. }
  44.  
  45. int main() {
  46.     solve(0, 0);
  47.     for (size_t i = 0; i < N; ++i) {
  48.         for (size_t j = 0; j <= N; ++j)
  49.             printf("%lld ", A[i][j]);
  50.         printf("\n");
  51.     }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement