Cod sursa(job #584197)

Utilizator blustudioPaul Herman blustudio Data 24 aprilie 2011 15:27:23
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include <fstream>
#include <cmath>
#include <iostream>
using namespace std;

unsigned long long int p, x, x1, x2, p1, p2;

int main()
{
	ifstream fin("lgput.in");
	ofstream fout("lgput.out");
	fin >> x >> p;
	x1 = 1;
	x2 = 1;
	x = x % 1999999973;
	if(p > 1)
	{
		p1 = 1;
		x1 = x;
		while(p1 <= p)
		{
			p1 *= 2;
			x1 = x1 * x1 % 1999999973;
		}
		x1 = sqrt(x1);
		p1 /= 2;
		p2 = p-p1;
		for(unsigned long long int i=1; i<=p2; i++)
		{
			x2 = x2 * x % 1999999973;
		}
		fout << x1 * x2 % 1999999973;
	}
	else
	{
		if(p == 0)
			fout << 1;
		else
			fout << x;
	}
	fout.close();
	fin.close();
	return 0;
}