Cod sursa(job #3243374)

Utilizator irina_opreaIrina Oprea irina_oprea Data 17 septembrie 2024 21:56:44
Problema Invers modular Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;

long long exponentiere (long long a, long long n);
long long phi (long long n);

int main()
{
    ifstream cin ("inversmodular.in");
    ofstream cout ("inversmodular.out");

    int a, n, putere=0;
    cin >> a >> n;
    putere = phi(n) - 1;
    cout << (exponentiere(a, putere) % n) << endl;
    return 0;
}

long long exponentiere (long long a, long long n)
{
    long long rez = 1;
    while (n)
    {
        if (n % 2 == 1)
        {
            rez = rez * a;
        }
        a = a * a;
        n /= 2;
    }
    return rez;
}

long long phi (long long a)  /// indicatorul lui euler
{
    long long rez = a;
    for (int i=2; i*i <= a; i++)
    {
        if (a % i == 0)
        {
            while (a % i == 0) a /= i;
            rez = (rez / i) * (i - 1);
        }
    }
    if (a != 1) rez = rez / a * (a - 1);
    return rez;
}