Cod sursa(job #2504528)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 5 decembrie 2019 01:19:31
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;

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

int n,mod,pr,MOD,x,invers;

void exp(int nr,int ad,int x)
 {
  if(nr!=pr)
  {
  if(nr+ad<=pr) {
                 invers=(invers*x)%MOD;
                 x=(x*x)%MOD;
                 nr+=ad;
                 ad*=2;
                 exp(nr,ad,x);
                }
  else exp(nr,1,n);
  }
 }
int main()
{
f>>n>>mod;
MOD=mod;
pr=mod;
int d=2;
while(d*d<=mod&&mod!=1)
  {
   if(mod%d!=0) d++;
   else
    {
     pr=pr/d*(d-1);
     while(mod%d==0)
       mod/=d;
    }
  }
if(mod!=1) pr=pr/mod*(mod-1);
pr--;
invers=n;
if(pr==0) g<<"1";
else
{
exp(1,1,n);
g<<invers;
}
}