Cod sursa(job #1119029)

Utilizator YoYoxxIftimesei Ioan YoYoxx Data 24 februarie 2014 14:39:11
Problema Invers modular Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#include<math.h>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
long long a,nn;

int nr(long long n)
{
    long long i,nn=n;
    for(i=2;i*i<=n;i++)
        if(n%i==0)
        {
                nn=nn*(i-1)/i;
                while(n%i==0)
                {
                    n=n/i;
                }
        }
    if(n!=1) nn=nn*(n-1)/n;
    return nn;
}

int ex(long long a,long long p,long long n)
{
    long long sol=1,i;
    for(i=0;(1<<i)<=p;i++)
    {
        if( ((1<<i)&p)>0  ) sol=(sol*a)%n;
        a=(a*a)%n;
    }
    return sol;
}

int main()
{
    long long i,nn,j,x;
    long long n;
    in>>a>>n;
    x=nr(n);
    out<<ex(a,x-1,n);
    return 0;
}