Cod sursa(job #1510679)

Utilizator din99danyMatei Daniel din99dany Data 25 octombrie 2015 15:00:39
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
using namespace std;

int euler( int n ){

    int i, j, t, d, ok;
    d = 1;
    i = 2;

    while( n > 1 ){
        t = 1;
        ok = 0;

        while( n % i == 0 ){
            n /= i;
            t *= i;
            ok = 1;
        }

        if( ok ) d *= ( i - 1 ) * t / i;
        i++;
    }

    return d;

}



int dei( int n, int x, int a ){

    if( x == 1 ) return a;
    else{

        int t = dei( n, x/2, a ) % n;

        if( x % 2 == 1 ) return a * t * t % n;
        else return t * t % n;

    }



}


int main()
{

    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);


    int a, x;

    scanf("%d%d",&a,&x);
    printf("%d",dei(x,euler(a)-1,a));


    return 0;
}