Cod sursa(job #3168277)

Utilizator DARIUSQSDarius Nicoara DARIUSQS Data 11 noiembrie 2023 21:30:22
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>
#include <cmath>
#include <fstream>
using namespace std;

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

long long a, N;

long long power(long long n, long long pow)
{
    if(pow == 0) return 1;
    if(pow % 2)  return (power(n * n % N, pow / 2) * n) % N;
    return (power(n * n % N, pow / 2))%N;
}

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

int main()
{
    fin >> a >> N;
    long long putere = power(a, euler(N) - 1);
    fout << putere % N;
}