Cod sursa(job #868240)

Utilizator addy01adrian dumitrache addy01 Data 30 ianuarie 2013 20:47:26
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>

using namespace std;

const int mod=1999999973;

inline long long putere(int x, int p, int c)
{
    long long rez = 1;
    x %= c;

    for( ; p; p >>= 1){
        if(p & 1)
            rez = (1LL * rez * x) % c;

        x = (1LL * x * x) % c;
    }

    return 1LL * rez;
}

 int logput(int x,int p)
{
    if(p == 0)
        return 1;
    else if(p == 1)
        return x;
    int ret = 1;
    if(p % 2 == 0)
    {
        ret = logput(x,p/2);
        ret *= ret;
        ret %= mod;
    }
    else
    {
        ret = logput(x,(p-1)/2);
        ret *= ret;
        ret *= x;
        ret %= mod;
    }
    return ret;
}

int main()
{
    int x,p;
    cin>>x;
    cin>>p;
    cout<<logput(x,p);
    return 0;
}