Cod sursa(job #2673767)

Utilizator gavra_bogdanBogdan Gavra gavra_bogdan Data 17 noiembrie 2020 17:46:19
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>

int n, m;

int prod(int a, int b) { return (a * b) % m; }

int putlog(int n, int k) {
    if (k == 0) return 1;
    int x = putlog(n, k / 2);
    if (k % 2 == 0) return prod(x, x);
    return prod(prod(x, x), n);
}

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

int main() {
    std::ifstream fin("inversmodular.in");
    std::ofstream fout("inversmodular.out");
    fin >> n >> m;
    fout << putlog(n, phi(m) - 1);
}