Pagini recente » Cod sursa (job #960123) | Cod sursa (job #1100623) | Cod sursa (job #451226) | Cod sursa (job #2256072) | Cod sursa (job #2038215)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream in ("inversmodular.in");
ofstream out ("inversmodular.out");
long long expow (long long b, long long e, long long mod)
{
int r=1;
while (e>0)
{
if (e%2)
r=r*b%mod;
b=b*b%mod;
e/=2;
}
return r;
}
int phi (int number)
{
int phi=number-1,aux=number;
bool is_divisor=false;
while (aux%2==0)
{
aux/=2;
is_divisor=true;
}
if (is_divisor)
{
phi=number/2;
}
is_divisor=false;
for (int i=3;i<=sqrt(number)+6;i+=2)
{
while (aux%i==0)
{
aux/=i;
is_divisor=true;
}
if (is_divisor)
{
phi=phi/i*(i-1);
is_divisor=false;
}
}
return phi;
}
int main()
{
long long a,n,x;
in>>a>>n;
x=expow(a,phi(n)-1,n);
out<<x;
}