Cod sursa(job #3199093)

Utilizator Radu_BicliBiclineru Radu Radu_Bicli Data 31 ianuarie 2024 19:10:12
Problema Invers modular Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
long long a, n;

static inline long long Phi(long long nr) {
    long long r = nr;
    long long d = 2;
    while(nr > 1) {
        if(nr % d == 0) {
            r = r / d * (d - 1);
            while(nr % d == 0) nr /= d;
        }
        d++;
        if(d * d > n) d = n;
    }
    return r;
}

static inline long long Put(long long a, long long n, long long mod) {
    long long p = 1;
    while(n) {
        if(n & 1) p = (p * a) % mod;
        a = (a * a) % mod;
        n >>= 1;
    }
    return p;
}

int main() {
    fin >> a >> n;
    fout << Put(a, Phi(n) - 1, n);

    return 0;
}