Pagini recente » Cod sursa (job #1092981) | Cod sursa (job #3283160) | Cod sursa (job #3253306) | Cod sursa (job #2872460) | Cod sursa (job #228592)
Cod sursa(job #228592)
#include<stdio.h>
#define LL long long
LL N,M;
LL cauta(LL nr)
{
LL c=nr,i;
for(i=2;i*i<=nr; ++i)
{
if (nr % i == 0)
{
while(nr % i == 0)nr /= i;
c = (c / i) * (i - 1);
}
}
if (nr != 1) c = c / nr * (nr - 1);
return c;
}
int main()
{
freopen("inversmodular.in","r",stdin);
freopen("inversmodular.out","w",stdout);
scanf("%lld %lld\n",&N,&M);
LL put =cauta(M)-1,p;
LL nr = N;
LL crt = 1;
for(p = 1;p <= put;p<<=1)
{
if (p & put) crt = (crt * nr) % M;
nr = (nr * nr) % M;
}
printf("%lld\n",crt);
return 0;
}