Cod sursa(job #818744)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 17 noiembrie 2012 22:18:08
Problema Invers modular Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include<cstdio>
using namespace std;
long long a,n,e=1,d,inv=1,i,N;
int main()
{
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out","w",stdout);
    scanf("%lld%lld",&a,&n);
    N=n;
    for(d=2;d*d<=n;d++)
        if(n%d==0)
        {
            while(n%d==0)
            {
                n/=d;
                e*=d;
            }
            e/=d;
            e*=d-1;
        }
    if(n>1)e*=n-1;
    e--;
    for(i=0;(1<<i)<=e;i++)
    {
        if((1<<i)&e) inv=(inv*a)%N;
        a=(a*a)%N;
    }
    printf("%lld\n",inv);
    return 0;
}