Pagini recente » Cod sursa (job #1261737) | Cod sursa (job #1457) | Cod sursa (job #1344277) | Cod sursa (job #1770749) | Cod sursa (job #1508380)
#include<iostream>
#include<stdio.h>
using namespace std;
int T,a,b,c,sol1,sol2;
bool OK = 1;
int gcd(int a, int b, int &x, int &y) {
if(b==0) {
x=1;
y=0;
return a;
}
else {
int x0,y0;
int d = gcd(b,a%b,x0,y0);
x = y0;
y = x0 - a/b *y0;
return d;
}
}
int euclid(int a, int b, int c) {
int x, y;
int d = gcd(a,b,x,y);
if(c%d) {
OK = 0;
return;
} else {
OK = 1;
sol1 = (c/d)*x;
sol2 = -(c/d)*y;
}
int K = -1, L = -1;
if(sol1 < 0) {
K = (b/d - 1 - sol1)/(b/d);
}
if(sol2 < 0) {
L = (a/d - 1 - sol2)/(a/d);
}
K = max(K,L);
if(K != -1) {
sol1 += K*b/d;
sol2 += K*a/d;
}
K = sol1 / (b/d);
L = sol2 / (a/d);
K = max(K,L);
if(K > 0) {
sol1 -= K*b/d;
sol2 -= K*a/d;
}
return d;
}
int main() {
freopen("euclid3.in","r",stdin);
freopen("euclid3.out","w",stdout);
scanf("%d",&T);
for(int i=1;i<=T;++i) {
OK = 1;
scanf("%d%d%d",&a,&b,&c);
euclid(a,b,c);
if(OK) {
printf("%d %d\n",sol1,-sol2);
} else {
printf("%d %d\n",0,0);
}
}
return 0;
}