Cod sursa(job #715620)

Utilizator algotrollNume Fals algotroll Data 17 martie 2012 15:32:35
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<cstdio>

void double_assign(int *pl1, int *pl2,    int r1, int r2)
{
    *pl1 = r1;
    *pl2 = r2;
}

int main()
{
    freopen("inversmodular.in", "r", stdin);
    freopen("inversmodular.out", "w", stdout);
    int A, N;
    scanf("%d %d", &A, &N);

    //euclid
    int a=A, b=N;
    int prevx=1, prevy=0, x=0, y=1;
    while (b!=0)
    {
        int cat = a/b;
        double_assign(&prevx,&x,   x,prevx-cat*x);
        double_assign(&prevy,&y,   y,prevy-cat*y);
        double_assign(&a,&b,   b,a%b);
    }
    int inv=prevx;
    if (inv<=0)
        inv+=N;
    printf("%d", inv);
    return 0;
}