Cod sursa(job #432071)

Utilizator SpiderManSimoiu Robert SpiderMan Data 1 aprilie 2010 19:56:37
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include<iostream>
#include<fstream>
#define modulo 1999999973
#define SQ(x) (long long) (x) * (x)

using namespace std;

ifstream fin("lgput.in");
ofstream fout("lgput.out");

int lgput(int N, int P)
{
    if (P==1)
        return ( long long ) N % modulo;
    else
        if (P==2)
            return (SQ(N)) % modulo;
        else
        {
            if (P%2==0)
            {
                long long x = ((long long)lgput(N,P/2));
                return (SQ(x)) % modulo;
            }
            else
                return ((long long) lgput(N,P-1) * N) % modulo;
        }
}

long long N,P,result;

int main()
{
    fin>>N;
    fin>>P;
    result = lgput(N,P);
    fout<<result;
    return 0;
}