Pagini recente » Cod sursa (job #2545172) | Cod sursa (job #1171110) | Cod sursa (job #636096) | Cod sursa (job #1861735) | Cod sursa (job #2978816)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
string np = "inversmodular";
ifstream f(np + ".in");
ofstream g(np + ".out");
// #define f cin
// #define g cout
ll a, n;
bool eprim(ll n)
{
if (n < 2 or (n % 2 == 0 and n != 2))
return 0;
for (ll i = 3; i * i <= n; i += 2)
if (n % i == 0)
return 0;
return 1;
}
ll Phi(ll n)
{
ll rez = n;
for (ll i = 2; i * i <= n; i++)
if (n % i == 0)
{
rez /= i;
rez *= (i - 1);
while (n % i == 0)
n /= i;
}
if (n > 1)
rez /= n, rez *= (n - 1);
return rez;
}
ll fastpow(ll a, ll b, ll mod)
{
ll rez = 1;
a %= mod, b %= mod;
while (b)
{
if (b % 2 == 1)
rez = (1LL * rez * a) % mod;
a = (1LL * a * a) % mod;
b /= 2;
}
return rez;
}
int main()
{
f >> a >> n;
if (eprim(n))
g << fastpow(a, n - 2, n);
else
g << fastpow(a, Phi(n) - 1, n);
return 0;
}