Pagini recente » Cod sursa (job #2700148) | Cod sursa (job #836016) | Cod sursa (job #2244249) | Cod sursa (job #1221260) | Cod sursa (job #1384694)
#include <iostream>
#include <fstream>
#define LL long long
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
LL A, N;
LL PPP1(LL nr)
{
LL cur = nr;
for(LL i = 2; i * i <= nr; ++i)
if (nr % i == 0)
{
while (nr % i == 0) nr /= i;
cur = (cur / i) * (i - 1);
}
if (nr != 1) cur = cur / nr * (nr - 1);
return cur;
}
inline LL PPP(LL n, LL p)
{
if (p == 0) return 1;
if (p == 1) return n;
if (p % 2 == 0) return (PPP((n * n) % N, p / 2)) % N;
return (n % N * PPP((n * n) % N, (p - 1) / 2)) % N;
}
int main()
{
LL p;
fin >> A >> N;
p = PPP1(N) - 1;
fout << PPP(A, p) % N;
return 0;
}