Cod sursa(job #2863388)

Utilizator Andrei_Tud1Andrei Tudorache Andrei_Tud1 Data 6 martie 2022 17:21:53
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");

int log_pow(int x, int p, int mod)
{
    int rez = 1;
    while(p)
    {
        if(p % 2 == 1)
        {
            rez = (rez * x) % mod;
        }

        x = (x * x) % mod;
        p /= 2;
    }
    return rez;
}

int main()
{
    int x, n;
    fin >> x >> n;
    int phi[n + 1];

    for (int i = 1; i <= n; ++i)
        phi[i] = i;
    for (int i = 2; i <= n; ++i)
    {
        if (phi[i] == i)
        {
            for (int j = i; j <= n; j += i)
                phi[j] = phi[j] / i * (i - 1);
        }
    }
    fout << log_pow(x, phi[n] - 1, n);
    return 0;
}