Pagini recente » Cod sursa (job #1378486) | Cod sursa (job #3199798) | Cod sursa (job #1545697) | Cod sursa (job #1546021) | Cod sursa (job #1119029)
#include <fstream>
#include<math.h>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
long long a,nn;
int nr(long long n)
{
long long i,nn=n;
for(i=2;i*i<=n;i++)
if(n%i==0)
{
nn=nn*(i-1)/i;
while(n%i==0)
{
n=n/i;
}
}
if(n!=1) nn=nn*(n-1)/n;
return nn;
}
int ex(long long a,long long p,long long n)
{
long long sol=1,i;
for(i=0;(1<<i)<=p;i++)
{
if( ((1<<i)&p)>0 ) sol=(sol*a)%n;
a=(a*a)%n;
}
return sol;
}
int main()
{
long long i,nn,j,x;
long long n;
in>>a>>n;
x=nr(n);
out<<ex(a,x-1,n);
return 0;
}