Pagini recente » Cod sursa (job #834598) | Cod sursa (job #887930) | Cod sursa (job #2285990) | Cod sursa (job #2616864) | Cod sursa (job #1344675)
#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);
q = ((q%n)*(q%n))%n;
q = (q*(a%n))%n;
return (q);
}
else
{
llu q = rtl(p/2);
q = ((q%n)*(q%n))%n;
return (q);
}
}
}
int main()
{
llu p;
in>>a>>n;
p = fi()-1;
out<<rtl(p);
}