Cod sursa(job #1477239)

Utilizator k_ounu_eddyIacob Eduard k_ounu_eddy Data 25 august 2015 19:26:12
Problema Invers modular Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<stdio.h>
#include<math.h>

long long exp(long long n, long long p)
{
    // infoarena: Ridicare la putere in timp logaritmic
    // http://www.infoarena.ro/job_detail/145518?action=view-source
    long long sol;
    long long a;
    a = n;
    for (int i = 0; (1<<i) <= p; ++ i)  // Luam toti biti lui p la rand
    {
        if ( ((1<<i) & p) > 0) // Daca bitul i din p este 1 atunci adaugam n^(2^i) la solutie 
            sol= (sol * a);
            // NOTA: ce reprezinta n^(2^i) ?
            a=(a * a); // Inmultim a cu a ca sa obtinem n^(2^(i+1))
    }
    return sol;
}

int main()
{
    long long A,N;
    freopen("inversmodular.in","r",stdin);
    freopen("inversmodular.out", "w", stdout);
    
    scanf("%lld", &A);
    scanf("%lld", &N);
    
    // pentru 60% din teste N este prim
    long long phi = N-1;
    printf("%lld", (long long)pow(A,N-2)%N);
    return 0;
}