Cod sursa(job #1128238)

Utilizator jumper007Raul Butuc jumper007 Data 27 februarie 2014 16:13:18
Problema Ridicare la putere in timp logaritmic Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

using namespace std;

const unsigned long long MOD = 1999999973;

unsigned long long expBySquaring(unsigned long long x, unsigned long long n) {
	if (n == 0) {
		return 1;
	}
	else if (n == 1) {
		return x;
	}
	else if (n % 2 == 0) {
		return (expBySquaring(x*x, n/2));
	}
	else if (n % 2 != 0) {
		return (x * expBySquaring(x*x, (n-1)/2));
	}
}

unsigned long long modular_pow(unsigned long long base, unsigned long long exponent) {
	unsigned long long c = 1;
	for (unsigned long long e_prime = 1; e_prime <= exponent; ++e_prime) {
		c = (c * base) % MOD;
	}
	return c;
}

int main(int argc, char *argv[]) {
	unsigned long long nr, power;

	fstream in("lgput.in", ios::in);
	in >> nr >> power;
	in.close();

	fstream out("lgput.out", ios::out);
	out << modular_pow(nr, power);
	out.close();

	return 0;
}