Pagini recente » Cod sursa (job #2154106) | Cod sursa (job #723670) | Cod sursa (job #3131346) | Cod sursa (job #2865671) | Cod sursa (job #712559)
Cod sursa(job #712559)
#include<cstdio>
#include<cmath>
using namespace std;
void read(),solve();
long long A,N,M,i,F[10010],k,MOD,SOL,E;
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
scanf("%lld%lld",&A,&N);
}
void solve()
{
M=N;
MOD=N;
for(i=2;i<=sqrt(double(M));i++)
{
if(M==1)break;
if(!(M%i))
{
F[++k]=i;
}
else continue;
while(!(M%i))
{
M/=i;
}
}
if(M>1)F[++k]=M;
E=N;
for(i=1;i<=k;i++)E/=F[i];
for(i=1;i<=k;i++)E*=(F[i]-1);
SOL=1;
E--;
for(;E;E/=2)
{
if(E%2)
{
SOL*=A;
SOL%=MOD;
}
A*=A;
A%=MOD;
}
printf("%lld\n",SOL);
}