Cod sursa(job #2184097)

Utilizator Athena99Anghel Anca Athena99 Data 23 martie 2018 18:38:22
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>

using namespace std;

ifstream fin("inversmodular.in");
ofstream fout("inversmodular.out");

typedef long long i64;

i64 a, n;

i64 lgput( i64 x, i64 y ) {
    i64 sol= 1;
    for ( ; y>0; y/= 2 ) {
        if ( y%2==1 ) {
            sol= (sol*x)%n;
        }

        x= (x*x)%n;
    }

    return sol;
}

int main(  ) {
    fin>>a>>n;

    i64 phi= n, j= n;
    for ( int i= 2; i*i<=n; ++i ) {
        if ( n%i==0 ) {
            for ( ; j%i==0; j/= i ) ;
            phi= phi/i*(i-1);
        }
    }

    if ( j>1 ) {
        phi= phi/j*(j-1);
    }

    fout<<lgput(a, phi-1)<<"\n";

    return 0;
}