Cod sursa(job #1666536)

Utilizator AndreiTACAndrei Cristian AndreiTAC Data 28 martie 2016 08:36:34
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.69 kb
#include <fstream>

using namespace std;

unsigned long long int x;

unsigned long long int exp(unsigned long long int x,int p)
{
    if(p==0)
        {
            return 1;
        }
    if(p==1)
        {
            return x;
        }
    if(p%2==0)
        {
            return (exp(x*x,p/2));
        }
    else
        {
            return (x*exp(x*x,(p-1)/2));
        }
}
int main()
{
    ifstream in("lgput.in");
    ofstream out("lgput.out");
    int n,p;
    in>>n>>p;
    if(p==1)
        x=n;
    else if(p==0)
        x=1;
    else if(p%2==0)
        x=exp(n*n,p/2);
    else
        x=n*exp(n*n,(p-1)/2);
    out<<x%1999999973;
    return 0;
}