Cod sursa(job #432066)

Utilizator SpiderManSimoiu Robert SpiderMan Data 1 aprilie 2010 19:53:11
Problema Ridicare la putere in timp logaritmic Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 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)
			return (SQ(lgput(N,P/2))) % 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;
}