Pagini recente » Cod sursa (job #1682284) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1511251) | Cod sursa (job #1650470)
#include<cstdio>
#include<iostream>
#define ll long long
using namespace std;
ll n,a;
ll getphi(int nr)
{
ll sol=nr,cnt,mod=nr;
for(ll i=2;i*i<=nr;i++)
if(nr%i==0)
{
cnt=0;
while(nr%i==0) { nr/=i; cnt++; }
sol=sol/i*(i-1)%mod;
}
if(nr!=1)
{
sol=sol/nr*(nr-1)%mod;
}
return sol;
}
int main()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
scanf("%lld%lld",&a,&n);
ll p=getphi(n)-1;
ll sol=1;
for(ll i=1; i<=p; i<<=1)
{
if( i&p ) sol=sol*a%n;
a=a*a%n;
}
cout<<sol<<'\n';
return 0;
}