Cod sursa(job #768072)

Utilizator bratualexBratu Alexandru bratualex Data 15 iulie 2012 21:30:51
Problema Algoritmul lui Euclid extins Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>

using namespace std;
ifstream fin ("euclid3.in");
ofstream fout ("euclid3.out");
void euclid (long long, long long ,long long *,long long *,long long *);
long long cmmdc (long long, long long );
int main()
{
    long long a,b,d,x,y,i,n,c,aux;
    fin>>n;
    for(i=0;i<n;i++)
    {
        fin>>a>>b>>d;
        c=cmmdc(a,b);
        if (d%c==0)
        {
            if(c==d)
            {
                euclid (a,b,&d,&x,&y);
                fout<<x<<" "<<y<<"\n";
            }
            else
            {
                aux=d;
                d=c;
                euclid(a,b,&d,&x,&y);
                x=(x*aux)/d;
                y=(y*aux)/d;
                fout<<x<<" "<<y<<"\n";
            }
        }
        else
            fout<<"0 0\n";

    }
    return 0;
}
 void euclid(long long a,long long b, long long *d, long long *x, long long *y)
{
    if (b == 0)
    {
        *d = a;
        *x = 1;
        *y = 0;
    } else
    {
        long long x0, y0;
        euclid(b, a % b, d, &x0, &y0);
        *x = y0;
        *y = x0 - (a / b) * y0;
    }
}
long long cmmdc (long long a, long long b)
{
    int r;
    if (a<b)
    {
        r=a;
        a=b;
        b=r;
    }
    while (b!=0)
    {
        r=b;
        b=a%b;
        a=r;
    }
    return a;
}