Cod sursa(job #1282580)

Utilizator TeodorescuStefanEduardTeodorescu Stefan Eduard TeodorescuStefanEduard Data 4 decembrie 2014 15:21:10
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.56 kb
#include <iostream>
#include <fstream>
#define R 1999999973
using namespace std;
fstream in("lgput.in",ios::in);
fstream out("lgput.out",ios::out);

unsigned long putere(unsigned long x,unsigned long p)
{
    if(p<0)
        return putere(1/x,-p);
    else if(p==0)
        return 1;
    else if(p==1)
        return x;
    else if(p%2==0)
        return putere((long long)x*x%R,p/2);
    else if(p%2!=0)
        return (long long)x*putere((long long)x*x%R,(p-1)/2)%R;
}

int main()
{
unsigned long n,p;

in>>n>>p;
in.close();
out<<putere(n,p);
out.close();


return 0;
}