Cod sursa(job #1134832)

Utilizator barabasi_csongorBarabasi Csongor barabasi_csongor Data 6 martie 2014 22:19:57
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#define ll unsigned long long int
using namespace std;

ll n,p;

/*
Function exp-by-squaring(x,n)
     if n<0 then return exp-by-squaring(1/x, -n);
     else if n=0 then return 1;
     else if n=1 then return x;
     else if n is even then return exp-by-squaring(x2, n/2);
     else if n is odd then return x * exp-by-squaring(x2, (n-1)/2).
*/

ll put(ll x,ll n)
{
   if(n==0) return 1;
   else
    {
        if(n==1) return x;
        else
            {
                if(n%2==0) return put(x*x,n/2);
                else return put(x*x,(n-1)/2);
            }
    }
}

int main()
{freopen("lgput.in","r",stdin);
freopen("lgput.out","w",stdout);
scanf("%llu%llu",&n,&p);
printf("%llu",put(n,p));
return 0;
}