Cod sursa(job #1132175)
Utilizator | Data | 2 martie 2014 20:22:27 | |
---|---|---|---|
Problema | Algoritmul lui Euclid extins | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.87 kb |
#include <iostream>
#include<stdio.h>
using namespace std;
FILE *f,*g;
int main()
{
int i,t,a,b,c,a1,a2,b1,b2,aux,aju,r1,r2,ss;
f=fopen("euclid3.in","r");
g=fopen("euclid3.out","w");
fscanf(f,"%d",&t);
for(i=1;i<=t;i++)
{
fscanf(f,"%d%d%d",&a,&b,&c);
if (a==0||b==0)
{
if (a==0&&b==0) fprintf(g,"0 0\n");
else
{
if (a==0)
{
if (c%b!=0) fprintf(g,"0 0\n");
else fprintf(g,"0 %d\n",c/b);
}
else
{
if (c%a!=0) fprintf(g,"0 0\n");
else fprintf(g,"%d 0\n",c/a);
}
}
}
else
{
bool as=1,bs=1,cs=1;
if (a<0) {a=-a;as=0;}
if (b<0) {b=-b;bs=0;}
if (c<0) {c=-c;cs=0;}
b1=1;a1=0;b2=0;a2=1;
r1=b;r2=a;
while(r2>0)
{
aux=r1/r2;
aju=r1%r2;
ss=b1;b1=b2;b2=ss-b2*aux;
ss=a1;a1=a2;a2=ss-a2*aux;
r1=r2;
r2=aju;
}
if (c%r1!=0) fprintf(g,"0 0\n");
else
{
long long qq,ww;
qq=(long long)b1*(c/r1);
ww=(long long)a1*(c/r1);
ww%=b;
qq=((long long)c-ww*a)/b;
if (as^cs) ww=-ww;
if(bs^cs) qq=-qq;
fprintf(g,"%lld %lld\n",ww,qq);
}
}
}
return 0;
}