Cod sursa(job #3298973)

Utilizator abel3324Ursu Abel-Patrick abel3324 Data 3 iunie 2025 16:08:49
Problema Algoritmul lui Euclid extins Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

int64_t Euclid_EXT(int64_t a,int64_t b,int64_t* x,int64_t* y)
{
    if(b==0)
    {
        *x=1;
        *y=0;
        return a;
    }
    int64_t x1,y1;
    int64_t d=Euclid_EXT(b,a%b,&x1,&y1);
    *x=y1;
    *y=x1-(a/b)*y1;
    return d;
}

int main(void)
{
    FILE *fin=fopen("euclid3.in","r");
    FILE *fout=fopen("euclid3.out","w");
    if(fin==NULL || fout==NULL)
    {
        fprintf(stderr,"eroare la deschiderea fisierelor");
        exit(EXIT_FAILURE);
    }
    int T;
    if((fscanf(fin,"%d",&T))!=1)
    {
        fprintf(stderr,"eroare la citirea lui T");
        exit(EXIT_FAILURE);
    }
    for(int i=0;i<T;i++)
    {
        int64_t a,b,c;
        if(fscanf(fin,"%ld %ld %ld",&a,&b,&c)!=3)
        {
            fprintf(stderr,"eroare la citirea elementelor din fisier");
            exit(EXIT_FAILURE);
        }
        int64_t x,y;
        int64_t d=Euclid_EXT(a,b,&x,&y);
        if(c%d)
        {
            fprintf(fout,"0 0 \n");
        }
        else
        {
            int64_t k=c/d;
            x*=k;
            y*=k;
            fprintf(fout,"%ld %ld \n",x,y);
        }
    }
    if((fclose(fin))!=0)
    {
        fprintf(stderr,"eroare la inchiderea fisierului de citire");
        exit(EXIT_FAILURE);
    }
    if((fclose(fout))!=0)
    {
        fprintf(stderr,"eroare la inchiderea fisierului de scriere");
        exit(EXIT_FAILURE);
    }
    return 0;
}