Cod sursa(job #2504531)

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

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

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

void exp(int nr,int ad,long long 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=3;
if(mod%2==0)
 {
  pr=pr/2;
  while(mod%2==0)
    mod/=2;
 }
while(d*d<=mod&&mod!=1)
  {
   if(mod%d!=0) d+=2;
   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;
}
}