Cod sursa(job #3299665)

Utilizator Tuduce_RobertTuduce Robert Florin Tuduce_Robert Data 9 iunie 2025 02:53:43
Problema Invers modular Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <stdio.h>

long long euclid_extins(long long a, long long b, long long *x, long long *y) {
    if (b == 0) {
        *x = 1;
        *y = 0;
        return a;
    }

    long long x1, y1;
    long long d = euclid_extins(b, a % b, &x1, &y1);

    *x = y1;
    *y = x1 - (a / b) * y1;

    return d;
}

long long invers_modular(long long a, long long n) {
    long long x, y;
    long long d = euclid_extins(a, n, &x, &y);
    if (d != 1) {
        return -1;
    } else {
        return (x % n + n) % n;
    }
}

int main() 
{
    long long A, N;
    FILE *fin,*fout;
    fin = fopen("inversmodular.in","r");
    fout = fopen("inversmodular.out","w");
    fscanf(fin,"%lld", &A);
    fscanf(fin,"%lld", &N);

    if (A <= 0 || N <= A) {
        return 1;
    }

    long long invers = invers_modular(A, N);
    if (invers == -1) {
        fprintf(fout,"%lld %lld", A, N);
    } else {
       fprintf(fout,"%lld", invers);
    }
    fclose(fin);
    fclose(fout);
    return 0;
}