Cod sursa(job #3278352)

Utilizator andreirose44Turcu Andrei andreirose44 Data 19 februarie 2025 15:29:22
Problema Algoritmul lui Euclid extins Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <stdio.h>

int euclid_e(int a, int b, int *x, int *y) {
    if (b == 0) {
        *x = 1;
        *y = 0;
        return a;
    }
    int x0, y0;
    int d = euclid_e(b, a % b, &x0, &y0);
    *x = y0;
    *y = x0 - (a / b) * y0;
    return d;
}

int main() {
    FILE *in = fopen("euclid3.in", "r");
    FILE *out = fopen("euclid3.out", "w");

    if (!in || !out) { 
        perror("Eroare la deschiderea fișierelor");
        return 1;
    }

    int n, a, b, c;
    fscanf(in, "%d", &n);
    for (int i = 0; i < n; i++) {
        fscanf(in, "%d %d %d", &a, &b, &c);
        int x, y;
        int d = euclid_e(a, b, &x, &y);

        // Verificăm dacă există soluție
        if (c % d != 0) {
            fprintf(out, "0 0\n");
        } else {
            // Scalăm soluția pentru c
            x *= c / d;
            y *= c / d;
            
            // Normalizăm soluția dacă e necesar (opțional)
            if (a < 0) x = -x;
            if (b < 0) y = -y;
            
            fprintf(out, "%d %d\n", x, y);
        }
    }

    fclose(in);
    fclose(out);
    return 0;
}