Cod sursa(job #2200200)
Utilizator | Data | 30 aprilie 2018 16:53:19 | |
---|---|---|---|
Problema | Invers modular | Scor | 20 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.65 kb |
#include <iostream>
#include <fstream>
using namespace std;
typedef long long ll;
int a,n,fi,na;
int pw(int nr,int exp){
if(exp==1)return nr;
else {
ll aux;
if(exp%2){
aux=pw(nr,exp-1);
aux=aux*(ll)nr;
return aux%n;
} else {
aux=pw(nr,exp/2);
aux=aux*aux;
return aux%n;
}
}
}
int main()
{
ifstream f ("inversmodular.in");
ofstream g ("inversmodular.out");
f>>a>>n;
na=fi=n;
for(int i=2;i<=n;i++)
if(na%i==0){
fi=(fi/i)*(i-1);
while(na%i==0)na/=i;
}
g<<pw(a,fi-1);
f.close ();
g.close ();
return 0;
}