Pagini recente » Cod sursa (job #1979997) | Cod sursa (job #505783) | Cod sursa (job #221563) | Clasament tpnr9 | Cod sursa (job #2673744)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
/*
void cmmdc(int a, int b, long long &x, long long &y)
{
if(b == 0)
{
x = 1;
y = 0;
}
else
{
long long x0,y0;
cmmdc(b, a % b, x0, y0);
x = y0;
y = x0 - a / b * y0;
}
}
int main()
{
int a,n;
long long x,y;
fin >> a >> n;
cmmdc(a,n,x,y);
if(x <= 0)x = n + x % n;
fout << x;
return 0;
}*/
long long phi_de_n(long long n)
{
int phin;
phin = n;
for(int i = 2; i * i <= n; ++i)
{
if(n % i == 0)
{
phin /= i;
phin *= (i - 1);
while(n % i == 0)
{
n /= i;
}
}
}
if(n != 1)
{
phin /= n;
phin *= (n - 1);
}
phin -= 1;
return phin;
}
int main()
{
long long a,n;
fin >> a >> n;
long long doru = 1;
long long phin = phi_de_n(n);
for(long long i = 1; i <= phin; i <<= 1)
{
if(i & phin)doru = (doru * a) % n;
a = (a * a) % n;
}
fout << doru;
return 0;
}