Cod sursa(job #3132906)

Utilizator sorynnsorin besleaga sorynn Data 24 mai 2023 12:00:45
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");

ll exp_log(ll x, ll n, ll m)
{
    if(n == 0) return 1;
    if(n%2) return x*exp_log(x*x%m, n/2, m)%m;
    return exp_log(x*x%m, n/2,m);
}

ll phi(ll n)
{
    ll result = n;
    for(int i = 2; i*i <= n; i++)
        if(n%i == 0)
        {
            while(n%i == 0)
                n/=i;
            result -= result/i;
        }

    if(n>1)
        result -= result/n;

    return result;
}

int main()
{
    ll a, m, p;
    in >> a >> p;
    m = p;
    out << exp_log(a, phi(p)-1, m);


    return 0;
}