Pagini recente » Cod sursa (job #332140) | Cod sursa (job #2683674) | Cod sursa (job #2102571) | Cod sursa (job #2821545) | Cod sursa (job #1344658)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
int a;
int fi(int n)
{
int 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;
}
unsigned long long int rtl(int n,int p)
{
if (p==0)
return 1;
else
{
if (p%2)
{
unsigned long long int q = rtl(n,p/2);
q = ((a*q)%n*q)%n;
return q;
}
else
{
unsigned long long int q = rtl(n,p/2);
q = (q*q)%n;
return q;
}
}
}
int main()
{
int n,p;
in>>a>>n;
p = fi(n)-1;
out<<rtl(n,p);
}