Cod sursa(job #2150509)

Utilizator BlackMWStefan Laurentiu BlackMW Data 3 martie 2018 16:45:50
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#include <tuple>
using namespace std;

tuple<int, int, int> read_input() {
	ifstream fin("lgput.in");
	int base, exponent, mod = 0xDEADBEEF;
	fin >> base >> exponent;
	fin.close();
	return make_tuple(base, exponent, mod);
}

int fast_pow(int base, int exponent, int mod) {
	if (exponent == 1)
		return base % mod;
	
	if (exponent % 2 == 0)
	{
		int call_result = (1LL * fast_pow(base, exponent / 2, mod) % mod) % mod;
		return (1LL * ((1LL * call_result) % mod) * call_result) % mod;
	}
		
	else
	{
		int result;
		int call_result = (1LL * fast_pow(base, exponent / 2, mod) % mod) % mod;

		result = base;
		result = (1LL * result * call_result) % mod;
		result = (1LL * result * call_result) % mod;

		return result;
	}
}

void print_output(int result) {
	ofstream fout("lgput.out");
	fout << result;
	fout.close();
}

int main() {
	int base, exponent, mod;
	tie(base, exponent, mod) = read_input();
	print_output(fast_pow(base, exponent, 1999999973));
//	cout << fast_pow(575848, 1818888, 1000000007);
	return 0;
}