Cod sursa(job #1510701)

Utilizator din99danyMatei Daniel din99dany Data 25 octombrie 2015 15:29:02
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 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 mod , int putere, int baza ){

    if( putere == 1 ) return baza;
    else{

        int t =  dei( mod, putere / 2, baza );

        if( putere % 2 == 1 ) return 1LL * t * t * baza % mod;
        return 1LL * t * t % mod;

    }

}


int main()
{

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


    int a, x, t;

    scanf("%d%d",&a,&x);

    t = euler( x );

    // printf("%d\n",t);

    printf("%d",dei( x, t-1, a ));


    return 0;
}