Cod sursa(job #1225158)

Utilizator george_stelianChichirim George george_stelian Data 1 septembrie 2014 02:46:19
Problema Invers modular Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.56 kb
#include <cstdio>
#include <cmath>

using namespace std;

long long a,n,x,nr,lim,sol,i;

int main()
{
    freopen("inversmodular.in", "r", stdin);
    freopen("inversmodular.out", "w", stdout);
    scanf("%lld%lld",&a,&n);
    x=nr=n;
    lim=sqrt(n);
    for(i=2;i<=lim;i++)
        if(x%i==0)
        {
            while(x%i==0) x/=i;
            nr-=nr/i;
        }
    if(x>1) nr=n-1;
    nr--;
    sol=1;
    for(i=1;i<=nr;i<<=1)
    {
        if(nr&i) sol=(sol*a)%n;
        a=(a*a)%n;
    }
    printf("%lld",sol);
    return 0;
}