Cod sursa(job #2227828)

Utilizator BloodRainBurceanu Gabriel BloodRain Data 1 august 2018 21:43:07
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <iostream>
#include <fstream>

using namespace std;

long long pow(unsigned int n, unsigned int p)
{
	if (p == 0)
		return 1;

	if (n == 0)
		return 0;

	if (n == 1)
		return 1;

	int logP = 0;

	unsigned int pp = p;
	while (pp >>= 1)
	{
		++logP;
	}

	long long k[33];

	k[0] = n;

	for (int i = 1; i <= logP; ++i)
		k[i] = k[i - 1] * k[i - 1];

	long long x = 1;
	int i = 0;
	do
	{
		if (p & 1)
			x *= k[i];
		++i;
	} while (p >>= 1);

	return x;
}
int main()
{
	ifstream in("lgput.in");
	ofstream out("lgput.out");


	unsigned int n, p;
	in >> n >> p;


	long long x = pow(n, p);

	out << x % 1999999973 << "\n";


	return 0;
}