Cod sursa(job #3214533)

Utilizator 1gbr1Gabara 1gbr1 Data 14 martie 2024 10:42:43
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <queue>
#include <iostream>
#include <bitset>
using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");
bool prim(int n)
{
    if (n < 2)
        return 0;
    if (n != 2 && n % 2 == 0)
        return 0;
    for (int i = 3; i * i <= n; i += 2)
        if (n % i == 0)
            return 0;
    return 1;
}
int phi(int x)
{
    int f, phi;
    f = 2;
    phi = x;
    if (prim(x))
        return x - 1;
    while (f * f <= x && x > 1)
    {
        if (x % f == 0)
        {
            while (x % f == 0)
                x /= f;
            phi /= f;
            phi *= (f - 1);
        }
        f++;
    }
    if (x > 1)
    {
        phi /= x;
        phi *= (x - 1);
    }
    return phi;
}
int lgput(int a, int b, int mod)
{
    int p = 1;
    while (b)
    {
        if (b % 2 == 1)
            p =1LL* p * a % mod;
        a = 1LL*a * a % mod;
        b /= 2;
    }
    return p;
}
int main()
{
    int a, b;
    fin >> a >> b;
    fout << lgput(a, phi(b)-1, b);
    return 0;
}