Cod sursa(job #3205290)

Utilizator BledeaAlexBledea Alexandru BledeaAlex Data 19 februarie 2024 10:39:06
Problema Invers modular Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>

typedef long long LL;

using namespace std;

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

LL a, n, phi;

LL phiOf(LL n){
    LL rez = n;

    int i;
    for(i = 2; i*i <= n; ++i)
        while(n % i == 0){
            n /= i;
            rez = (rez / i) * (i - 1);
        }

    if(n != 1)  /// a ramas un nr prim mare
        rez = (rez / n) * (n - 1);

    return rez;
}

LL pow(LL n, LL p, const LL MOD){
    LL rez = 1, f = n;

    while(p){
        if(p % 2 == 1)
            rez = (rez * f) % MOD;
        f = (f * f) % MOD;
        p >>= 1;
    }

    return rez;
}

int main()
{
    f >> a >> n;

    phi = phiOf(n);

    g << pow(a, phi - 1, n);

    return 0;
}