Pagini recente » Cod sursa (job #2287666) | Cod sursa (job #1620906) | Cod sursa (job #1325935) | Cod sursa (job #2681335) | Cod sursa (job #2909064)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("euclid3.in");
ofstream fout("euclid3.out");
long long int cmmdc(long long int a, long long int b) //calculam cmmdc cu teorema lui euclid
{
while(a!=0)
{
long long r = b%a;
b=a;
a=r;
}
return b;
}
void euclid(long long int a,long long int b,long long int* d,long long int* x,long long int* y)
{
if (!b) { //cand b e 0
*d=a; //cmmdc devine a
*x=1;//initializam x si y (a*x + b*y = d =>)
*y=0;
} else {
long long int x0, y0;
euclid(b, a%b, d, &x0, &y0); //facem pas euclid (b*x0 + (a%b)*y0 = d; a*x + b*y = d; rezolvam sistem)
*x = y0; //actualizam x
*y = x0-(a/b)*y0; //aproximam y
}
}
int main()
{
long long int a, b, c, x, y, nr;
fin>>nr;
while(nr!=0)
{
nr--;
fin>>a>>b>>c;
long long d =cmmdc(a, b);
long long rez = c/d;
if(c%d)//daca c nu este multiplu de d nu avem solutie
fout<<0<<" "<<0<<endl;
else
{
euclid(a, b, &d, &x, &y);
fout<<x*rez<<" "<<y*rez<<endl;
}
}
return 0;
}