Cod sursa(job #820055)

Utilizator MciprianMMciprianM MciprianM Data 19 noiembrie 2012 23:24:14
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.59 kb
#include <fstream>

using namespace std;

typedef unsigned long long ll;

//preconditii: a, b >= 0; c > 0
ll put(ll a, ll b, ll c) {
    //invariant de reducere a spatiului: b' < b
	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;
	}
}
//postconditii: valoarea de return este egala cu a^b mod c

int main() {
    const ll MOD = 1999999973ll;
	ll n, p;
	ifstream f("lgput.in");
	ofstream g("lgput.out");
	f >> n >> p;
	g << put(n, p, MOD) << endl;
	f.close();
	g.close();
	return 0;
}