Cod sursa(job #1789808)

Utilizator OFY4Ahmed Hamza Aydin OFY4 Data 27 octombrie 2016 15:36:30
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>

#define ll long long

using namespace std;

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

ll a, n, tmp;

ll get_tmp()
{
    int s = n, c = n;
    for(ll i = 2; i * i <= n; ++i)
    {
        if(c % i == 0)
        {
            s = s - s / i;
            while(c % i == 0)
                c = c / i;
        }
    }
    if(c != 1)
        s = s - s / c;

    return s;
}

ll put()
{
    ll meh = 1;
    while(tmp > 0)
    {
        if(tmp % 2 == 1)
        {
            meh = meh * meh;
            meh = meh % n;
            --tmp;
        }
        a = a * a;
        a = a % n;
        tmp = tmp / 2;
    }
    return meh;
}

int main()
{
    in >> a >> n;
    tmp = get_tmp();
    out << put();
}