Pagini recente » Cod sursa (job #1430417) | Cod sursa (job #90348) | Cod sursa (job #925264) | Cod sursa (job #541042) | Cod sursa (job #1075995)
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("inversmodular.in");
ofstream g("inversmodular.out");
int lgput(int a, int n);
int n3;
int main(){
int a,n,phi,i,x,n2;
f>>a>>n;
n2=sqrt(n)+1;
phi=n;
n3=n;
for(i=2; i<= n2; ++i){
if(!(n%i)){
phi=phi-phi/i;
n/=i;
while(!(n%i))
n/=i;
}
}
if(n>1){
phi=phi-phi/n;
}
phi--;
g<<lgput(a,phi);
f.close();
g.close();
return 0;
}
int lgput(int a, int n){
if(n==1){
return a%n3;
}
else
if(n%2) {
long long t;
a%=n3;
t=(a*a)%n3;
return a*(lgput(t,(n-1)/2))%n3;
}
else{
long long t;
a%=n3;
t=(a*a)%n3;
return lgput(t,n/2);
}
}