Cod sursa(job #362795)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 10 noiembrie 2009 23:53:27
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.51 kb
#include <stdio.h>
#define M 1999999973
#define impar(x) ((x & 1) == 1)
#define t long long

t exp_log(t b, t e)
{
	if(e == 0 || e == 1) return b % M;
	if(impar(e))
	{
		t rp = exp_log(b, e - 1);
		return (rp * (b % M)) % M;
	}
	else
	{
		t rp = exp_log(b, e / 2);
		return (rp * rp) % M;
	}
}
int main()
{
	t baza, exponent;
	freopen("lgput.in", "r", stdin);
	freopen("lgput.out", "w", stdout);
	scanf("%lld %lld", &baza, &exponent);
	fclose(stdin);
	printf("%lld\n", exp_log(baza,exponent));
	fclose(stdout);
	return 0;
}