Cod sursa(job #3299372)

Utilizator tudor-cristian.saftescuSaftescu Tudor Cristian tudor-cristian.saftescu Data 5 iunie 2025 18:59:06
Problema Algoritmul lui Euclid extins Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.77 kb
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

long euclid(long a, long b, long* coef_a, long* coef_b)//euclid pentru a si b
{
    if(b==0)
    {
        *coef_a=1;//coeficientul lui a
        *coef_b=0;//coeficientul lui b
        return a;
    }

    long coef_a_temp,coef_b_temp;
    long cmmdc=euclid(b,a%b,&coef_a_temp,&coef_b_temp);

    *coef_a=coef_b_temp;
    *coef_b=coef_a_temp-(a/b)*coef_b_temp;

    return cmmdc;
}


int main(void)
{   
    uint8_t t;
    
    FILE *fin=fopen("euclid3.in","r");
    FILE *fout=fopen("euclid3.out","w");
    
    if(fin==NULL)//verificam deschiderea fisierelor
    {
        perror("Eroare la deschiderea fisierului de citire.\n");
        exit(1);
    }
    if(fout==NULL)
    {
        perror("Eroare la deschiderea fisierului de scriere.\n");
        exit(1);
    }

    if((fscanf(fin,"%hhd",&t))!=1)
    {
        perror("Eroare la citirea din fisier.\n");
        exit(1);
    }
    
    while(t--)
    {
        long a,b,c;
        if(fscanf(fin,"%ld %ld %ld",&a,&b,&c)!=3)
        {
            perror("Eroare la citirea din fisier.\n");
            exit(1);
        }
        long x,y;
        long d=euclid(a,b,&x,&y);//aplicam euclid pt cei 2 coeficienti a si b

        if (c%d!=0) 
        {
            fprintf(fout,"0 0\n");
        } 
        else 
        {
            x=x*c/d;
            y=y*c/d;
            fprintf(fout,"%ld %ld\n",x,y);
        }
    }

    if(fclose(fin)!=0)//verificam inchiderea fisierelor
    {
        perror("Eroare la inchiderea fisierului de citire.\n");
        exit(1);
    }
    
    if(fclose(fout)!=0)
    {
        perror("Eroare la inchiderea fisierului de scriere.\n");
        exit(1);
    }
    
    return 0;
}