Pagini recente » Cod sursa (job #413418) | Cod sursa (job #1167848) | Cod sursa (job #868366) | Cod sursa (job #665767) | Cod sursa (job #1279532)
#include <cstdio>
#include <cmath>
using namespace std;
long long n;
bool Prim(int a)
{
if(a==0||a==1||(a%2==0&&a>2))
return false;
else
{
int lim;
lim=(int)sqrt((double)a);
for(int d=3;d<=lim;d+=2)
if(a%d==0)
return false;
return true;
}
}
int np(long long nr)
{
int s=0;
for(int i =2;i<n;++i)
if(nr%i)
++s;
return s;
}
long long rez(long long x, long long y) {
if(y == 0)
return 1;
long long d = rez(x, y/2);
if(y%2 == 0)
return d*d%n;
else
return d*d%n*x%n;
}
int main()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
long long a;
int x;
scanf("%lld%lld",&a,&n);
if(Prim(n))
printf("%lld\n",rez(a,n-2));
else
printf("%lld\n",rez(a,np(n)-1));
return 0;
}