Cod sursa(job #2345769)

Utilizator Moise_AndreiMoise Andrei Moise_Andrei Data 16 februarie 2019 17:46:40
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("inversmodular.in");
ofstream out("inversmodular.out");
int lgput(int a, int p, int mod)
{
    int res = 1;
    while(p > 0)
    {
        if(p % 2 == 1)
            res = (res * a) % mod;
        a = (a * a) % mod;
        p /= 2;
    }
    return res;
}
int f(int n)
{
    int r = 1, d = 2;
    while(n > 1)
    {
        int put = 0;
        while(n % d == 0)
        {
            n /= d;
            put ++;
        }
        if(put != 0)
            r *= (d - 1) * lgput(d, put - 1, n);
        d ++;
        if(n > 1 && d * d > n)
            d = n;
    }
    return r;
}
int main()
{
    int a, n;
    in >> a >> n;
    out << lgput(a, f(n) - 1, n);
    return 0;
}