Cod sursa(job #1290901)

Utilizator diana97Diana Ghinea diana97 Data 11 decembrie 2014 22:12:19
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int a, n;

int phi(int n) {
    int x = n;
    for (int i = 2; i * i <= x; i++) {
        if (n % i == 0) {
            while (n % i == 0) n /= i;
            x = x / i * (i - 1);
        }
    }
    if (n != 1) x = x / n * (n - 1);
    return x;
}

int putere(int x, int p) {
    int a;
    if (p == 0) return 1;
    a = putere(x, p / 2);
    a = (1LL * a * a) % n;
    if (p % 2 == 0) return a;
    return (1LL * a * x) % n;
}

int main() {
    f >> a >> n;
    int fi = phi(n) - 1;
    g << putere(a, fi);
    return 0;
}