Cod sursa(job #1708767)

Utilizator UPB_Darius_Rares_SilviuPeace my pants UPB_Darius_Rares_Silviu Data 27 mai 2016 22:09:04
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;

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

long long N, A;

int phi(int x) {
    int res = x;

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

    if (x != 1) {
        res = res / x * (x - 1);
    }
    return res;
}

long long lgPow(long long base, long long exp, long long mod) {
    long long res = 1;

    while (exp) {
        if (exp & 1) {
            res = (res * base) % mod;
        }

        base = (base * base) % mod;
        exp >>= 1;
    }
    return res;
}

int main() {
    f >> A >> N;
    g << lgPow(A, phi(N) - 1, N) << '\n';
    return 0;
}