Cod sursa(job #3135042)

Utilizator Tulbure_Alexandru_NicolaeTulbure Alexandru Nicolae Tulbure_Alexandru_Nicolae Data 1 iunie 2023 17:00:58
Problema Invers modular Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>

FILE *fin = NULL, *fout = NULL;
long long mod;
long long phi(long long n)
{
    long long rezultat = n;
    for (int i = 2; i * i <= n; i++)
    {
        if (n % i == 0)
        {
            while (n % i == 0)
                n = n / i;
            rezultat = rezultat - rezultat / i;
        }
    }
    if (n > 1)
        rezultat = rezultat - rezultat / n;
    return rezultat;
}

long long ridicare(long long a, long long n)
{
    long long rezultat = 1;
    while (n > 0)
    {
        if (n % 2 == 1)
            rezultat = (rezultat * a)%mod;
        a = (a * a)%mod;
        n = n / 2;
    }
    return rezultat;
}

int main()
{
    long long a,n;
    fin = fopen("inversmodular.in", "r");
    fout = fopen("inversmodular.out", "w");
    fscanf(fin, "%lld %lld", &a, &n);
    mod = n;
    fprintf(fout, "%lld", ridicare(a, phi(n)-1));
    fclose(fin);
    fclose(fout);
    return 0;
}