Cod sursa(job #2035874)

Utilizator robertro1Benedek Robert George robertro1 Data 9 octombrie 2017 21:48:48
Problema Invers modular Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
ll exp_log(ll a, ll e,ll mod)
{
    ll rez=1;
    while(e!=0)
    {
        if(e%2==1)
        {
            rez=(rez*a)%mod;
        }
        a=(a*a)%mod;
        e=e/2;
    }
    return rez%mod;
}
ll fi(ll nr)
{
    ll var=1,e=0,gasit=0;
    for(int i=2; i*i<=nr; ++i)
    {
        if(nr%i==0)
        {
            gasit=1;
            e=0;
            while(nr%i==0)
            {
                nr=nr/i;
                e++;
            }
            if(e)
            var=var*exp_log(i,e-1,n)*(i-1);
        }
    }
    if(gasit)
    return var;
    else
        return nr-1;
}

int main()
{
    ifstream f("inversmodular.in");
    ofstream g("inversmodular.out");
    ll a;
    f>>a>>n;
    g<<exp_log(a,fi(n)-1,n);
    return 0;
}