Cod sursa(job #2948110)

Utilizator andreipirjol5Andrei Pirjol andreipirjol5 Data 27 noiembrie 2022 11:39:49
Problema Invers modular Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>

using namespace std;

FILE *fin, *fout;

int MOD;

long long lgput(int base, int exp)
{
    long long p = base, p1 = 1;

    while(exp)
    {
        if(exp % 2 == 1)
        {
            p1 = 1LL * p1 * p % MOD;
            exp--;
        }
        else

        {
            p = 1LL * p * p % MOD;
            exp /= 2;
        }
    }

    return p1;
}

long long euler(int n)
{
    long long euler = n, d = 2;

    while(1LL * d * d <= n)
    {
        if(n % d == 0)
        {
            euler = euler / d * (d - 1);

            while(n % d == 0)
                n /= d;
        }

        d++;
    }

    if(n > 1)
        euler = euler / n * (n - 1);

    return euler;
}

int main()
{
    fin = fopen("inversmodular.in", "r");
    fout = fopen("inversmodular.out", "w");

    int a, n;
    fscanf(fin, "%d%d", &a, &n);

    MOD = n;

    fprintf(fout, "%lld", lgput(a , euler(n) - 1) % MOD);

    fclose(fin);
    fclose(fout);
    return 0;
}