Cod sursa(job #3249887)

Utilizator TEODOR_782IOACHIMCIUC TEODOR TEODOR_782 Data 18 octombrie 2024 18:05:09
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
using namespace std;

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

long long euler(long long b)
{
    long long x = b;
    for (long long d = 2; d * d <= b; d++)
    {
        if (b % d == 0)
        {
            while (b % d == 0) b /= d;
            x /= d;
            x *= (d - 1);
        }
    }
    if (b != 1)
    {
        x = x / b;
        x = x * (b - 1);
    }
    return x;
}

long long pow(long long b, long long p, long long mod)
{
    long long x = 1;
    while (p)
    {
        if (p & 1) x = (x * b) % mod;
        b = (b * b) % mod;
        p >>= 1;
    }
    return x;
}

int main()
{
    long long a, b, sol, p;
    in >> a >> b;
    p = euler(b) - 1;
    out << pow(a, p, b);
}