Pagini recente » Cod sursa (job #3206590) | Cod sursa (job #3212380) | Cod sursa (job #3225151) | Cod sursa (job #47076) | Cod sursa (job #1189336)
#include <stdio.h>
int fi(long long cn){
long long i=2,r,n=cn,pp=0;
double put=1,rez=cn;
while(i*i<=cn){
int pp=0;
while(cn%i==0){
cn/=i;
pp=1;
}
if(pp==1){
put=(double)1/(double)i;
rez*=(1-put);
}
i++;
while(cn%i!=0&&i*i<=cn)
i++;
}
if(cn!=1)
{
put=(double)1/(double)2;
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;
}