Cod sursa(job #487173)

Utilizator slycerdan dragomir slycer Data 23 septembrie 2010 23:25:57
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <string>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <cassert>
#include <stdio.h>
#include <cmath>
#include <iostream>
#include <fstream>
using namespace std;
const long long MODULE = 1999999973;

long long go( long long a, long long b ){
    //cout << "test";
    if ( b<0) return go(a,-b); 
    if ( b==0) return 1;
    if ( b==1) return a%MODULE;
    if ( b%2==0){
        long long aux =go(a,b/2)%MODULE;
        return (aux*aux)%MODULE;
    }
    else{
        long long aux = go(a,b/2)%MODULE;
        return (((aux*aux)%MODULE)*a)%MODULE;
    }
}

int main() {

   // cout << ( 1<<31-1);
    ifstream input("lgput.in");
    ofstream output("lgput.out");
   // cout << " start \n";
    long long a;
    long long b;
    input >> a >> b;
    output << go ( a, b) << endl;
    output.close();
    return 0;
}