Cod sursa(job #768071)

Utilizator bratualexBratu Alexandru bratualex Data 15 iulie 2012 21:28:39
Problema Algoritmul lui Euclid extins Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.23 kb
#include <fstream>

using namespace std;
ifstream fin ("euclid3.in");
ofstream fout ("euclid3.out");
void euclid (int, int ,int *,int *,int *);
int cmmdc (int, int );
int main()
{
    int 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(int a, int b, int *d, int *x, int *y)
{
    if (b == 0)
    {
        *d = a;
        *x = 1;
        *y = 0;
    } else
    {
        int x0, y0;
        euclid(b, a % b, d, &x0, &y0);
        *x = y0;
        *y = x0 - (a / b) * y0;
    }
}
int cmmdc (int a, int b)
{
    int r;
    if (a<b)
    {
        r=a;
        a=b;
        b=r;
    }
    while (b!=0)
    {
        r=b;
        b=a%b;
        a=r;
    }
    return a;
}