Cod sursa(job #447225)

Utilizator dcm9000Dinu Cristian Mircea - UPB dcm9000 Data 28 aprilie 2010 00:59:51
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>

using namespace std;

#define FILE_IN "lgput.in"
#define FILE_OUT "lgput.out"

typedef unsigned int uint;

#define MODULO 1999999973ULL

uint N, P;

uint putere(uint N, uint P)
{
    uint rezultat = 1ULL;

    for (int i=31-__builtin_clz(P); i>=0; i--)
    {
        rezultat = (rezultat * rezultat) % MODULO;
        if (P & (1ULL << i)) rezultat = (N * rezultat) % MODULO;
    }

    return rezultat;
}

int main()
{
    ifstream fisIn(FILE_IN);
    ofstream fisOut(FILE_OUT);

    fisIn >> N >> P;

    fisOut << putere(N,P);
}