Cod sursa(job #2034452)

Utilizator aditoma2001Toma Adrian aditoma2001 Data 7 octombrie 2017 20:40:39
Problema Invers modular Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>

using namespace std;

#define ll long long

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

ll fi(ll n)
{
    bool div=0;
    ll inloc=n,prod=1;
    for (int i=2;i*i<=n;++i)
    {
        if (inloc%i==0)
        {
            div=1;
            while (inloc%i==0)
            {
                inloc/=i;  prod*=i;
            }
            prod/=i;
            prod*=(i-1);
            if (inloc==1) break;
            while (inloc%(n/i)==0)
            {
                inloc/=(n/i); prod*=n/i;
            }
            prod*=(n/i-1);
            prod/=(n/i);
        }
        if (inloc==1) break;
    }
    return (div==0 ? n-1 : prod);
}

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;
}