Advertisement
Gornak40

Gauss 2 idz

Oct 21st, 2022
940
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. #include <cstddef>
  2. #include <cassert>
  3. #include <iostream>
  4.  
  5. using namespace std;
  6.  
  7. const size_t N = 3;
  8. const size_t M = 7;
  9.  
  10. long long A[N][M] = {
  11.     {6, -4, 3, -1, 6, -2, 17},
  12.     {19, 10, -3, 2, -16, -42, -61},
  13.     {-5, -3, 1, 0, 6, 11, 18},
  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 < M; ++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 < M; ++j)
  49.             printf("%lld ", A[i][j]);
  50.         printf("\n");
  51.     }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement