Cod sursa(job #228387)

Utilizator Mishu91Andrei Misarca Mishu91 Data 7 decembrie 2008 00:30:47
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <cstdio>

long long A, N;

long long find(long long x)
{
    long long rez = x;
    
    for(long long i = 2; i*i <= x; ++i)
        if(x % i == 0)
        {
            while(x % i == 0)
                x /= i;
            rez = (rez/i) * (i-1);
        }
        
    if(x > 1) rez = (rez/x)*(x-1);
    return rez - 1;
}

int main()
{
    freopen("inversmodular.in","rt",stdin);
    freopen("inversmodular.out","wt",stdout);

    scanf("%lld %lld",&A, &N);

    long long P = find(N), Rez = 1;

    for(;P; P >>= 1)
    {
        if(P & 1)
            Rez = (Rez * A) % N;
        A = (A * A) % N;
    }
    printf("%lld\n",Rez);
}