Cod sursa(job #2909064)

Utilizator bucketlover413Sodinca Iulia Cristiana bucketlover413 Data 8 iunie 2022 15:59:00
Problema Algoritmul lui Euclid extins Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("euclid3.in");
ofstream fout("euclid3.out");

long long int cmmdc(long long int a, long long int b) //calculam cmmdc cu teorema lui euclid
{
    while(a!=0)
    {
    long long r = b%a;
    b=a;
    a=r;
    }
    return b;
}

void euclid(long long int a,long long int b,long long int* d,long long int* x,long long int* y)
{
    if (!b) { //cand b e 0
        *d=a; //cmmdc devine a
        *x=1;//initializam x si y (a*x + b*y = d =>)
        *y=0;
    } else {
        long long int x0, y0;
        euclid(b, a%b, d, &x0, &y0); //facem pas euclid (b*x0 + (a%b)*y0 = d; a*x + b*y = d; rezolvam sistem)
        *x = y0; //actualizam x
        *y = x0-(a/b)*y0; //aproximam y
    }
}

int main()
{

long long int a, b, c, x, y, nr;

fin>>nr;
while(nr!=0)
{
    nr--;
    fin>>a>>b>>c;
    long long d =cmmdc(a, b);
    long long rez = c/d;
    if(c%d)//daca c nu este multiplu de d nu avem solutie
        fout<<0<<" "<<0<<endl;
    else
    {


        euclid(a, b, &d, &x, &y);
        fout<<x*rez<<" "<<y*rez<<endl;
    }

}

    return 0;
}