Cod sursa(job #1840194)

Utilizator alexandruchiriacAlexandru Chiriac alexandruchiriac Data 3 ianuarie 2017 21:37:39
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
using namespace std;

#define mod 1999999973

ifstream f("lgput.in");
ofstream g("lgput.out");

long long N , P;

long long exp_log ( long long n , long long p )
{
    if ( p == 0 ) return 1;
    else if ( p == 1 ) return n;
        else
        {
            if ( p % 2 == 0 ) return exp_log( (n*n)%mod , p/2  )%mod;
            else return ( n * exp_log( (n*n)%mod , (p-1)/2 ) )%mod ;
        }
}


int main()
{
    f >> N >> P;
    //g << exp_log(N,P);
    int rez = 1;
    while ( P )
    {
        if ( P % 2 == 0 )
        {
            N = ( N * N )  % mod;
            P = P / 2;
        }
        else
        {
            P--;
            rez = ( rez * N ) % mod ;
        }
    }
    g << rez;
    return 0;
}