Cod sursa(job #2034876)

Utilizator eragon0502Dumitrescu Dragos eragon0502 Data 8 octombrie 2017 15:42:32
Problema Invers modular Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.61 kb
#include <cstdio>

using namespace std;

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

    int i,a,mod,n,div=0;
    scanf("%d %d",&a,&n);
    mod=n;

    for(i=1;i*i<n;++i)
    {
        if(n%i==0)
            div+=2;
    }
    if(i*i==n)
        div++;
    n-=div;

    long long ans=1,x=a;
    while(n>1)
    {
        if(n%2==0)
        {
            n/=2;
            x=(x*x)%mod;
        }
        else
        {
            --n;
            ans=ans*x%mod;
        }
    }

    printf("%d",ans*x%mod);

    return 0;
}