Cod sursa(job #2034501)

Utilizator aditoma2001Toma Adrian aditoma2001 Data 7 octombrie 2017 22:04:48
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <bits/stdc++.h>

using namespace std;

#define ll long long

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

ll fi(ll nr)
{
    ll cur = nr;
    for(ll i = 2;i * i <= nr; ++i)
    {
        if (nr % i == 0)
        {
            while(nr % i == 0)nr /= i;
            cur = (cur / i) * (i - 1);
        }
    }
    if (nr != 1) cur = cur / nr * (nr - 1);
    return cur;
}

ll exp_log(ll n,ll e,ll mod)
{
    ll sol=1;
    while (e!=0)
    {
        if (e%2==1) sol=sol*n%mod;
        n=n*n%mod;
        e/=2;
    }
    return sol%mod;
}

int main()
{
    ll a,n;
    f>>a>>n;
    g<<exp_log(a,fi(n)-1,n);
    return 0;
}