Cod sursa(job #2209936)

Utilizator SulfusSulfus Sulfus Data 5 iunie 2018 01:30:10
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include <fstream>

constexpr int modulo = 1999999973;

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

	if (p < 0)
	{
		n = 1 / n;
		p = -p;
	}
	long long r = 1;

	while (p > 1)
	{
		if (!(p & 1))
		{
			n = n * n % modulo;
			p /= 2;
		}
		else
		{
			r = n * r % modulo;
			n = n * n % modulo;
			p = (p - 1) / 2;
		}
	}
	return n * r % modulo;
}

int main()
{
	int n, p;

	std::ifstream in("lgput.in");
	std::ofstream out("lgput.out");

	in	>> n >> p;
	out	<< raise(n, p);

	in.close();
	out.close();

	return 0;
}