Cod sursa(job #937049)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 9 aprilie 2013 14:23:17
Problema Invers modular Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
using namespace std;
ifstream f ( "inversmodular.in" );
ofstream g ( "inversmodular.out" );
#define ll long long
ll A, N;


ll EXP ( int  POWER )
{
    if ( POWER == 1 ) return A;

    return POWER % 2 ? ( A * ( EXP ( POWER / 2 ) %N* EXP ( POWER / 2 )%N ) % N ) % N : ( EXP ( POWER / 2 )%N * EXP ( POWER / 2 )%N ) % N;
}

int phi ( int value )
{
    int i, result = value;

    for ( i = 2; i*i <= value; ++i ) if ( value % i == 0 )
        {
            for ( ; value % i == 0; value /= i );

            result = result - result / i;
        }

    if ( value != 1 )
        result = result - result / value;

    return result;
}
int main()
{
    f >> A >> N;
    g << EXP ( phi ( N ) - 1 ) << '\n';


    f.close();
    g.close();
    return 0;
}