Cod sursa(job #1344622)

Utilizator alexandru.ghergutAlexandru-Gabriel Ghergut alexandru.ghergut Data 16 februarie 2015 21:01:59
Problema Invers modular Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <cmath>
using namespace std;

int phi(int n);
int modularPow(int base, int exponent, int mod);

int main()
{
    int A, N;
    ifstream f("inversmodular.in");
    f >> A >> N;
    f.close();

    ofstream g("inversmodular.out");
    g << modularPow(A, phi(N) - 1, N);
    g.close();

    return 0;
}

int phi(int n)
{
    int result = n;
    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0)
            result -= result / i;
        while (n % i == 0)
            n /= i;
    }

    if (n > 1)
        result -= result / n;

    return result;
}

int modularPow(int base, int exponent, int mod)
{
    int result = 1;
    while (exponent)
    {
        if (exponent & 1)
            result = ((result % mod) * (base % mod)) % mod;
        base = ((base % mod) * (base % mod)) % mod;
        exponent >>= 1;
    }

    return result;
}