Cod sursa(job #177319)

Utilizator andreisfrentSfrent Andrei andreisfrent Data 12 aprilie 2008 17:44:44
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.5 kb
#include <stdio.h>
#define M 1999999973
#define impar(x) ((x & 1) == 1)

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