Cod sursa(job #1384694)

Utilizator Narcys01Ciovnicu Narcis Narcys01 Data 11 martie 2015 12:34:45
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#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;
}