Pagini recente » Borderou de evaluare (job #562552) | Borderou de evaluare (job #385555) | Borderou de evaluare (job #203668) | Borderou de evaluare (job #1987054) | Cod sursa (job #1967214)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream in("euclid3.in");
ofstream out("euclid3.out");
typedef long long ll;
ll gcd(ll,ll,ll&,ll&);
int main() {
ll T;
in>>T;
while (T--) {
ll a,b,c,x,y,d;
in>>a>>b>>c;
d = gcd(a,b,x,y);
// pentru a ajunge din a*x + b*y = d
// in a*x1 + b*y1 = c
// trebuie sa inmultim prima relatie cu c/d
// x1,y1 vor fi numere intregi doar daca c este divizibil cu d
// din moment ce x si y nu pot fi ambele divizibile cu d,
// conform lemei lui Bezout
if (c % d != 0) {
out<<"0 0\n";
continue;
}
out<<x*c/d<<' '<<y*c/d<<'\n';
}
in.close();out.close();
return 0;
}
ll gcd(ll a,ll b,ll& x,ll& y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
ll x0,y0,d;
d = gcd(b,a%b,x0,y0);
// x,y,x0,y0 sunt 4 numere intregi care indeplinesc relatiile:
// a*x + b*y = d
// b*x0 + (a%b)*y0 = d
x = y0;
y = x0 - (a/b)*y0;
return d;
}