Cod sursa(job #943119)

Utilizator ShadoWolfCodrut Constantin Gusoi ShadoWolf Data 24 aprilie 2013 13:42:31
Problema Algoritmul lui Euclid extins Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <limits>
using namespace std;
  
ifstream in("euclid3.in");
ofstream out("euclid3.out");
 
void euclid(long a, long b, long *d, long *x, long *y);
void euclid_extins(long a,long b,long c);
long cmmdc(long a,long b);
 
int main()
{
    long n,a,b,c;
    in>>n;
    in.ignore(numeric_limits<streamsize>::max(),'\n');
    for(int i=0;i<n;++i)
    {
        in>>a>>b>>c;
        in.ignore(numeric_limits<streamsize>::max(),'\n');
        euclid_extins(a,b,c);
    }
    in.close();
    out.close();
    return 0;
}
 
void euclid_extins(long a,long b,long c)
{
    long d=cmmdc(a,b);
    long x,y;
 
    if (c%d!=0)
    {
        out<<0<<" "<<0<<"\n";
    }
    else
    {
        euclid(a,b,&d,&x,&y);
        out<<x*(c/d)<<" "<<y*(c/d)<<"\n";
    }
}
 
long cmmdc(long a,long b)
{
    long r;
    while (b)
    {
        r=a%b;
        a=b;
        b=r;
    }
    return a;
}
 
void euclid(long a, long b, long *d, long *x, long *y)
{
    if (b == 0) {
        *d = a;
        *x = 1;
        *y = 0;
    } else {
        long x0, y0;
        euclid(b, a % b, d, &x0, &y0);
        *x = y0;
        *y = x0 - (a / b) * y0;
    }
}