Pagini recente » Cod sursa (job #1152321) | Cod sursa (job #259992) | Cod sursa (job #502836) | Cod sursa (job #392955) | Cod sursa (job #1189191)
#include <stdio.h>
int fi(long long cn){
long long i,r,n=cn,pp=0;
double put=1,rez=cn;
while(cn%2==0){
pp=1;
cn/=2;
}
if(pp==1){
put=1/2;
rez*=(1-put);
}
for(i=3;i*i<=cn;i+=2){
pp=0;
while(cn%i==0){
pp=1;
cn/=i;
}
if(pp==1){
put=1/i;
rez*=(1-put);
}
}
r=rez;
if(r==n)
r--;
return r;
}
int put(long long f,long long p,long long n){
long long rez=1;
while(p!=0){
if(p%2==1){
rez*=f%n;
p--;
}
else{
f*=f%n;
p/=2;
}
}
return rez;
}
int main(){
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
long long n,cn,a,p;
scanf("%lld%lld",&a,&n);
cn=n;
p=fi(cn);
p--;
p=put(a,p,n);
p%=n;
printf("%lld",p);
return 0;
}