Cod sursa(job #1877816)

Utilizator CodrinsahCotarlan Codrin Codrinsah Data 13 februarie 2017 18:58:45
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream fi ("inversmodular.in");
ofstream fo ("inversmodular.out");
int prim[200],x,y,phi,i;
long long rez;
int ph(int a)
{
  int sol,n=0;
  sol=a;
  for (i=2;i<=sqrt(a+.1);i++)
  if (a%i==0)
  {
    n++;
    prim[n]=i;
    while (a%i==0) a=a/i;
  }
  if (a>1) {n++;prim[n]=a;}
  for (i=1;i<=n;i++) sol=sol*(prim[i]-1)/prim[i];
  return sol;
}
int inmult(long long baza,int exponent)
{
  while (exponent>0)
  {
    if (exponent%2==1)
      {
        rez=(rez*baza)%y;
        exponent--;
      }
    else
      {
        baza=(baza*baza)%y;
        exponent=exponent/2;
      }
  }
  return rez;
}
int main()
{
    fi>>x>>y;
    phi=ph(y);
//    fo<<phi<<'\n';
    rez=1;
    fo<<inmult(x,phi-1);
    return 0;
}