Cod sursa(job #2857694)

Utilizator stalecuAlecu Stefan-Iulian stalecu Data 26 februarie 2022 09:32:01
Problema Algoritmul lui Euclid extins Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <tuple>
#include <fstream>
#include <iostream>
#include <cstdlib>

std::tuple<int, int, int> cmmdcExtins(int a, int b) {
  auto r = std::make_tuple(a, b);
  auto s = std::make_tuple(1, 0);
  auto t = std::make_tuple(0, 1);

  while (std::get<1>(r) != 0) {
    int quot = std::get<0>(r) / std::get<1>(r);
    r = {std::get<1>(r), std::get<0>(r) - quot * std::get<1>(r)};
    s = {std::get<1>(s), std::get<0>(s) - quot * std::get<1>(s)};
    t = {std::get<1>(t), std::get<0>(t) - quot * std::get<1>(t)};
  }

  return std::make_tuple(std::get<0>(s), std::get<0>(t), std::get<1>(r));
}

int main() {
  std::fstream in;
  in.open("euclid3.in", std::ios::in);

  int M;
  if (!in.is_open()) {
    std::cerr << "File could not be opened." << std::endl;
    exit(EXIT_FAILURE);
  }

  in >> M;
  std::fstream out;
  out.open("euclid3.out", std::ios::out);
  if (!out.is_open()) {
    std::cerr << "File could not be written to." << std::endl;
    exit(EXIT_FAILURE);
  }
  int a, b, c;
  for (; M && in >> a >> b >> c; --M) {
    auto extins = cmmdcExtins(a, b);
    int x = std::get<0>(extins);
    int y = std::get<1>(extins);
    int cmmdc = std::get<2>(extins);
    if (c % cmmdc != 0) {
      out << "0 0\n";
    }
    else {
      out << x << " " << y << "\n";
    }
  }

  in.close();
  out.close();
  exit(EXIT_SUCCESS);
}