Pagini recente » Cod sursa (job #1051683) | Cod sursa (job #136418) | Cod sursa (job #1578397) | Cod sursa (job #1605247) | Cod sursa (job #1344671)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
#define llu unsigned long long int
llu a,n;
int fi()
{
llu res=n,i;
for(i=2;i*i<n;i++)
{
if (n%i==0) res -=res/i;
while(n%i==0)
res /=i;
}
if(n>1)
res -= res/n;
return res;
}
llu rtl(llu p)
{
if (p==0)
return 1;
else
{
if (p%2)
{
llu q = rtl(p/2);
return ((q*a%n*q)%n);
}
else
{
llu q = rtl(p/2);
return ((q*q)%n);
}
}
}
int main()
{
llu p;
in>>a>>n;
p = fi()-1;
out<<rtl(p);
}