Cod sursa(job #1119009)

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

int nr()
{
    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(int a,int p)
{
    int 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()
{
    int i,nn,j,x;
    in>>a>>n;
    x=nr();
    out<<ex(a,x-1);
    return 0;
}