Cod sursa(job #1434796)

Utilizator airineivAirinei Vasile airineiv Data 11 mai 2015 14:18:32
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <fstream>
#include <algorithm>

using namespace std;

#define MOD 1999999973

unsigned long long  exp_by_squaring(unsigned long long x, long long n)
{
	x = x % MOD;

	if(n < 0)
		return exp_by_squaring(x, -n) % MOD;
	if(n == 0)
		return 1;

	if(n == 1)
		return x % MOD;

	if(n %2 == 0)
		return exp_by_squaring((x * x) % MOD, n/2) % MOD;
	else
		return (x * (exp_by_squaring((x*x) % MOD, (n-1)/2) % MOD) ) % MOD;

}

int main(void)
{
	int N = 0, P = 0;
	ifstream fin("lgput.in");
	ofstream fout("lgput.out");

	fin >> N >>P;
	
	fout<<exp_by_squaring(N, P);

	return 0;
}