Cod sursa(job #1425027)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 26 aprilie 2015 13:43:40
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>

using namespace std;

ifstream f("inversmodular.in");
ofstream g("inversmodular.out");

long long a, n, x, y, i, dp, p;

long long phi(long long N)
{
    long long cn = N;
    for (i = 2; i*i <= N; i++)
    if (!(N%i))
    {
        while (!(N%i))
            N /= i;
        cn = (cn / i) * (i-1);
    }
    if (N > 1)
        cn = cn / N * (N-1);

    return cn;
}

int main()
{
    f >> a >> n;
    dp = phi(n)-1;
    long long rez = 1, nr = a;
    for (p = 1; p <= dp; p <<= 1)
    {
        if (p & dp)
            rez = (rez * nr) % n;
        nr = (nr * nr) % n;
    }
    g << rez;
    return 0;
}