Cod sursa(job #2127959)

Utilizator StefanMudragMudrag Stefan StefanMudrag Data 11 februarie 2018 11:58:19
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.64 kb
#include<iostream>
#include<fstream>
#define ull unsigned long long

using namespace std;

ifstream fin("lgput.in");
ofstream fout("lgput.out");

ull fastExp(ull a, ull b, int mod)
{
	int start = 0;
	ull rez;


	if (b == 1) return (a%mod);
	if (b == 0) return 1;

	for (int i = 31; i >= 0; --i)
	{
		if (b &(1 << i))
		{
			start = i;
			break;
		}
	}

	rez = a;
	for (int i = start - 1; i >= 0; --i)
	{
		rez = ((rez %mod) * (rez%mod)) % mod;
		if (b&(1 << i))
			rez = ((rez%mod)*(a %mod)) % mod;
	}

	return rez;

}
int main()
{
	ull a, b;

	fin >> a >> b;
	fout << fastExp(a, b, 1999999973);

	return 0;
}