Cod sursa(job #3298910)

Utilizator tudorboscuTudor Boscu tudorboscu Data 2 iunie 2025 23:46:49
Problema Invers modular Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <stdio.h>
#include <stdint.h>

#define MODULO 2000000000

// avem ecuatia A * x + N * y = 1
int64_t invers_modular(int64_t A, int64_t N, int64_t *x, int64_t *y)
{
    if (N == 0){   //in cazul asta avem A * 1 + 0 = A
        *x = 1;
        *y = 0;
        return A; 
    }

    int64_t x_aux, y_aux;
    int64_t res = invers_modular(N, A % N, &x_aux, &y_aux);

    *x = y_aux;  
    *y = x_aux - (A / N) * y_aux;

    return res;
}

int main(void)
{
    FILE *fin = fopen("inversmodular.in", "r");
    FILE *fout = fopen("inversmodular.out", "w");

    int64_t A;
    int64_t N;
    fscanf(fin, "%ld %ld", &A, &N);

    int64_t x, y;

    // A = 5;
    // N = 7;

    int64_t res = invers_modular(A, N, &x, &y);
    // printf("%lu.\n", x);

    if (res != 1){
        // printf("inversu modular este = %lu", x);
        fprintf(fout, "%ld", x);
    }
    else{
        //prelucram.
        x = ((x % N + N) % N);
        // printf("%lu\n", x);
        fprintf(fout, "%ld", x);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}