Cod sursa(job #1095985)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 1 februarie 2014 13:01:00
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include<cstdio>

using namespace std;

typedef long long int LL;

LL N,A;

LL phi(LL X)
{
    LL rasp=X,i;
    for(i=2;i*i<=X;i++)
        if(X%i==0)
        {
            while(X%i==0)
                X/=i;
            rasp=rasp/i*(i-1);
        }
    if(X>1) rasp=rasp/X*(X-1);
    return rasp;
}

LL exp(LL B,LL E)
{
    LL i,p=B,rasp=1;
    for(i=1; i<=E; i<<=1)
    {
        if(i&E) rasp=(rasp*p)%N;
        p=(p*p)%N;
    }
    return rasp;
}

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

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

    printf("%lld\n",exp(A,phi(N)-1));

    return 0;
}