Cod sursa(job #981197)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 6 august 2013 15:59:42
Problema Ridicare la putere in timp logaritmic Scor 30
Compilator c Status done
Runda Arhiva educationala Marime 0.53 kb
#include <stdio.h>
#define DIVIDER 1999999973

long long pow1(unsigned a, unsigned b)
{
	long long exp = a;
	while (--b)
		exp = (exp * a) % DIVIDER;

	return exp;
}


long long pow2(unsigned a, unsigned b)
{
	long long exp = 0;

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

	exp = pow2(a, b/2) * pow2(a, b/2);
	if (b%2) exp *= a;

	return exp % DIVIDER;
}


int main()
{
	unsigned N, P;

	freopen("lgput.in", "r", stdin);
	freopen("lgput.out", "w", stdout);

	scanf("%d %d", &N, &P);
	

	printf("%lld\n", pow2(N, P));
	
	return 0;
}