Cod sursa(job #3039032)

Utilizator StefanromanulStefan Parus Stefanromanul Data 28 martie 2023 08:03:56
Problema Algoritmul lui Euclid extins Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <fstream>
using namespace std;
int mc=0,nc=0,mc1=0,nc1=0,qc=0,qc1=0,r=1;
struct nr{
int m,n,cmmdc;
};
nr euclid(int a,int b)
{

    int pas=0;
    while(a%b)
    {

        r=a%b;
        qc=a/b;
        if(pas==0)
        {
            mc=1;
            nc=-qc;
            pas++;
        }
        else if(pas==1)
        {
            mc1=mc;
            nc1=nc;
            mc=-qc;
            nc=1+qc*qc1;
        pas++;
        }
        else {
            int aux=mc1-mc*qc;
            int aux1=nc1-nc*qc;
            mc1=mc;
            nc1=nc;

            mc=aux;
            nc=aux1;
        }
        qc1=qc;

        a=b;
        b=r;

    }

    if(pas!=0)
    {
        r=a%b;
            a=b;
        b=r;
        nr rez;
    rez.n=nc;
    rez.m=mc;
    rez.cmmdc=a;
    return rez;
    }
    else{

        nr rez;
            rez.n=1;
    rez.m=0;
    rez.cmmdc=b;
    return rez;
    }
}
int main()
{
    ifstream cin("euclid3.in");
    ofstream cout("euclid3.out");
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        int a,b,c;
        cin>>a>>b>>c;
        if(b==0)
        {
            if(c%a==0)
                cout<<c/a<<" "<<170<<'\n';
            else cout<<0<<' '<<0<<'\n';
        }
        else{
            nr d=euclid(a,b);
        if(c%d.cmmdc==0)
        {
           d.m*=c/d.cmmdc;
        d.n*=c/d.cmmdc;

        cout<<d.m<<" "<<d.n<<" "<< '\n';
        }
        else cout<<0<<' '<<0<<'\n';
        }

    }
    return 0;
}