Cod sursa(job #868258)

Utilizator addy01adrian dumitrache addy01 Data 30 ianuarie 2013 21:00:55
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include<cstdio>
using namespace std;

const int c=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()
{
    freopen("lgput.in","r",stdin);
    freopen("lgput.out","w",stdout);
    long long x,p;
    cin>>x;
    cin>>p;
    cout<<putere(x,p,c);
    return 0;
}