Cod sursa(job #508942)

Utilizator liviu12345Stoica Liviu liviu12345 Data 9 decembrie 2010 22:40:23
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <iostream>

using namespace std ;

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

const long MODULO = 1999999973 ;

unsigned long long exp ( unsigned long long Baza , unsigned long long Exponent ) ;

int main ( )
{
  cout << exp ( 100 , 2 ) ;
  unsigned long long n , p ;
  f >> n >> p ;
  g << exp ( n , p ) ;
}

unsigned long long exp ( unsigned long long Baza , unsigned long long Exponent )
{
  unsigned long long deReturnat = 1 , bit = 1 , impartitor = 1 ;
  while ( Exponent )
  {
    while ( ! ( Exponent & bit ) )
    {
      Exponent >>= 1 ;
      Baza *= Baza ;
      Baza %= MODULO ;
    }
    impartitor = Baza ;
    while ( Exponent & bit )
    {
      Exponent >>= 1 ;
      Baza *= Baza ;
      Baza %= MODULO ;
    }
    deReturnat *= Baza ;
    deReturnat /= impartitor ;
    deReturnat %= MODULO ;
  }
  return deReturnat ;
}