Cod sursa(job #1789751)

Utilizator NinjaCubeMihai Radovici NinjaCube Data 27 octombrie 2016 15:06:10
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream in("inversmodular.in");
ofstream out("inversmodular.out");

long long A,N;
long long phi;
long long getphi()
{
   int sol=N;
   int CN=N;
   for(long long i=2;i*i<=N;i++)
   {
       if(CN%i==0)
       {
           sol=sol-sol/i;
           while(CN%i==0)
           {
               CN=CN/i;
           }
       }
   }
   if(CN!=1)
        sol=sol-sol/CN;
   return sol;
}

long long pow()
{
    long long i=A;
    A=1;
    for(;phi>0;)
    {
        if(phi%2==1)
        {
            A=(A*i)%N;
            phi--;
        }
        i=(i*i)%N;
        phi=phi/2;
    }
    return A;
}

int main()
{
    in>>A>>N;
    phi=getphi()-1;
    out<<pow();
}