Cod sursa(job #2096484)

Utilizator epermesterNagy Edward epermester Data 29 decembrie 2017 12:21:43
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.52 kb
#include<fstream>
using namespace std;
bool binary[33];

void dtob(long a,short& i) {
	if (a % 2) binary[i] = true;
	if (a / 2) dtob(a / 2, ++i);
}

int main() {
	int x;	long P;					//
	ifstream in("lgput.in");
	ofstream out("lgput.out");
	in >> x >> P;
	short n = 0;
	dtob(P,n);
	long long *szorzat = new long long[n];
	szorzat[0] = x;
	long long result = 1;
	for (int i = 0;i <= n;++i) {
		if (i>0) szorzat[i] = szorzat[i - 1] * szorzat[i-1];
		if (binary[i]) result *= szorzat[i];
	}
	out << result;
}