Cod sursa(job #2740856)

Utilizator muiepulicimatacutactu muiepulici Data 14 aprilie 2021 15:59:30
Problema Ridicare la putere in timp logaritmic Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.57 kb
#include <iostream>
#include <fstream>

unsigned long long RidicareLogaritmica(unsigned long N, unsigned long P) {
	if (N == 2)
		return 1LL * 1 << P;

	unsigned long long cpy = N;
	unsigned long ret = 1;

	while (P != 0) {
		if ((P & 1) == 1)
			ret = (ret * cpy) % 1999999973;

		cpy = (cpy * cpy) % 1999999973;

		P /= 2;
	}

	return ret;
}

int main() {	
	std::ifstream fin("lgput.in");
	std::ofstream fout("lgput.out");

	unsigned long N, P;
	fin >> N >> P;

	fout << RidicareLogaritmica(N, P) << '\n';

	fin.close();
	fout.close();

	return 0;
}