Cod sursa(job #870061)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 2 februarie 2013 20:05:16
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
ifstream f ( "lgput.in" );
ofstream g ( "lgput.out" );
#define ll unsigned long long
ll A, N;

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

    if ( POWER % 2)
    return  ( N * ( EXP ( POWER / 2 )%N * EXP ( POWER / 2 )%N ) % N ) % N ;
    else
     return ( EXP ( POWER / 2 )%N * EXP ( POWER / 2 )%N ) % N;
}
ll phi ( ll value )
{
    ll 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;
 //   A%=N;
   // g << EXP ( phi ( N ) - 1 ) << '\n';
    ll P;
    N=1999999973;
    f>>A>>P;
    g<<EXP(P);



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