Cod sursa(job #2121097)

Utilizator SenibelanMales Sebastian Senibelan Data 3 februarie 2018 11:54:35
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
include<stdio.h>
#define LL long long
 
 
LL N,M;
 
LL getphi(LL nr)
{
    LL cur = nr;
    for(LL i = 2;i * i <= nr; ++i)
    {
        if (nr % i == 0)
        {
            while(nr % i == 0)nr /= i;
            cur = (cur / i) * (i - 1);
        }
    }
        if (nr != 1) cur = cur / nr * (nr - 1);
    return cur;
}
 
int main()
{
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    scanf("%lld %lld\n",&N,&M);
        LL put = getphi(M) - 1;
    LL nr = N;
    LL crt = 1;
    for(LL p = 1;p <= put;p <<= 1)
    {
        if (p & put) crt = (crt * nr) % M;
        nr = (nr * nr) % M;
    }
    printf("%lld\n",crt);
    return 0;
}