Cod sursa(job #1499172)
| Utilizator | Data | 10 octombrie 2015 12:09:38 | |
|---|---|---|---|
| Problema | Invers modular | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.62 kb |
#include <iostream>
#include <fstream>
using namespace std;
int pwr(long long n,long long p){
int sol=1;
for(int i=0;((1<<i)<=p); ++i){
if((1<<i) & p) sol*=n;
n*=n;
}
return sol;
}
long long int n,x,fi;
int main()
{
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
in >> x >> n;
fi = n;
for(int i=2;1ll * i * i <= n;i++){
if(!(n%i))
{
while (!(n%i)) n/=i;
fi = fi - fi / i;
}
}
if (n != 1) fi -= fi / n;
int rasp = pwr(x,fi - 1);
out << rasp;
return 0;
}
