Cod sursa(job #2467822)

Utilizator ginaiulianaGina Iuliana ginaiuliana Data 5 octombrie 2019 08:48:41
Problema Invers modular Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("inversmodular.in");
ofstream fout("inversmodular. out");

///complexitate O(sqrt(n))
int Phi(int n)
{
    int sol = n, p;
    for(p = 2; p * p <= n && n > 1; p++)
    {
        if(n % p == 0)
            sol = sol / p *(p-1);
        while(n % p == 0)
            n /= p;
    }
    if(n > 1)
        sol = sol / n * (n - 1);
    return sol;
}
int LogP(int a, int n, int Mod)
{
    int p =1;
    while(n > 0)
    {
        if(n % 2 == 0) p = 1LL* p* a %Mod;
        n=n/2;
        a = a* a% Mod;
    }
    return p;
}
int main()
{
    int a, n, phi;
    fin >> a >> n;
    phi = Phi(n);
    fout << LogP(a, phi-1, n) << "\n";
    fout.close();
    return 0;
}