Cod sursa(job #1419332)

Utilizator MarianVasilcaMarian Vasilca MarianVasilca Data 15 aprilie 2015 13:29:11
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>

const char *in_file_name = "lgput.in";
const char *out_file_name = "lgput.out";
const int d = 1999999973;
long long N, P;

using namespace std;

void die(bool assertion, const char *message)
{
	if (assertion) {
		fprintf(stderr, "(%s, %d): ",__FILE__, __LINE__);
		perror(message);
		exit(EXIT_FAILURE);
	}
}

long long get_value()
{
	long long result = 1;

	for (int i = 0; (1<<i) <= P; ++ i) {
		if (((1<<i) & P) > 0)
            result = (result * N) % d;
     
            N = (N * N) % d; 

	}

	return result;

}

int main()
{

	ifstream in_file;
	ofstream out_file;

	in_file.open(in_file_name, ios::in);
	die(!in_file, "Error opening file for reading");

	out_file.open(out_file_name, ios::out);
	die(!out_file, "Error opening file for writing");

	in_file >> N;
	in_file >> P;

	out_file << get_value();

	in_file.close();
	out_file.close();

	return 0;
}