Cod sursa(job #964239)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 20 iunie 2013 14:35:22
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");

#define ll long long

ll val,MOD;

int get_phi(int value){

  int result=1;

  for(int i=2;i*i<=value;++i)
    if (value%i==0){
      int p=1;
      for (;value%i==0&&value>0;)
        p*=i,value/=i;

      result*=(p-p/i);
    }
  if (value>1) result*=(value-1);
  return result;
}

ll lgpow(int P){
    if (P==0) return 1;
    if (P==1) return val;
    if (P%2) return (val*lgpow(P-1))%MOD;
    if (P%2==0) return (lgpow(P/2)*lgpow(P/2))%MOD;
}
int inverse(int value,int phi){
   return lgpow(phi-1);
}
int main()
{

  f>>val>>MOD;
  g<<inverse(val,get_phi(MOD));

    f.close();
    g.close();
    return 0;
}