Cod sursa(job #3305213)

Utilizator Costy2345Costi Dimian Costy2345 Data 30 iulie 2025 18:12:22
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>
#define int long long
using namespace std;

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

int a, mod;
int lgput(int a, int n)
{
    if(n == 0)
    {
        return 1;
    }
    else if(n % 2 == 0)
    {
        int val = lgput(a, n / 2);
        return (val * val) % mod;
    }
    else if(n % 2 == 1)
    {
        return (a * lgput(a, n - 1)) % mod;
    }
}

int getphi(int n){
    int cur = n;
    for(int i = 2; i * i <= n; i++)
    {
        if(n % i == 0)
        {
            while(n % i == 0)n /= i;
            cur = (cur / i) * (i - 1);
        }
    }
    if(n != 1)cur = (cur / n) * (n - 1);
    return cur;
}

signed main()
{
    fin >> a >> mod;
    fout << lgput(a, getphi(mod) - 1);
    return 0;
}