Cod sursa(job #820068)

Utilizator MciprianMMciprianM MciprianM Data 19 noiembrie 2012 23:33:38
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.6 kb
#include <fstream>

using namespace std;

typedef unsigned long long ll;

ll mul(ll a, ll b, ll c) {
	if(b == 0)	return 0;
	else {
		ll tmp = mul(a, b >> 1, c);
		tmp = (tmp << 1) % c;
		if(b & 1)	tmp = (tmp + a) % c;
		return tmp;
	}
}

ll put(ll a, ll b, ll c) {
	if(b == 0)	return 1 % c;
	else {
		ll tmp = put(a, b >> 1, c);
		tmp = mul(tmp, tmp, c);
		if(b & 1)	tmp = mul(tmp, a, c);
		return tmp;
	}
}

int main() {
	ll a, b, c = 1999999973ll;
	ifstream f("lgput.in");
	ofstream g("lgput.out");
	f >> a >> b;
	g << put(a, b, c) << endl;
	f.close();
	g.close();
	return 0;
}