Pagini recente » Cod sursa (job #2195127) | Cod sursa (job #1106697) | Cod sursa (job #2825012) | Cod sursa (job #1847187) | Cod sursa (job #1316454)
#include <cstdio>
#include <cmath>
using namespace std;
long long numprimes(long long n)
{
long long lim=(long long)sqrt((double)n);
long long ans=n;
long long div=2;
while(div*div<=n)
{
bool ok = false;
while(n%div==0)
n/=div,ok=true;
if(ok==true)
ans/=div*(div-1);
++div;
}
if(n>1)
ans=ans/n*(n-1);
return ans;
}
long long lgput (long long a,long long b,long long mod)
{
if(b==0)
return 1;
else
{
long long c= lgput(a,b/2,mod);
if(b&1)
return c*c%mod*a%mod;
else
return c*c%mod;
}
}
int main()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
long long a,n;
scanf("%lld%lld",&a,&n);
printf("%d\n",lgput(a,numprimes(n)-1,n)%n);
return 0;
}