Cod sursa(job #362792)

Utilizator andrei.sfrentSfrent Andrei andrei.sfrent Data 10 noiembrie 2009 23:42:52
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.48 kb
#include <stdio.h>

#define MOD 1999999973

unsigned int log_exp(unsigned int n, unsigned int p)
{
	if(p == 1) return n;
	else
	{
		int nextexp = log_exp(n, p / 2) % MOD;
		if(p % 2 == 1) return (((n * nextexp) % MOD) * nextexp) % MOD;
		else return (nextexp * nextexp) % MOD;
	}
}

int main()
{
	freopen("lgput.in", "r", stdin);
	freopen("lgput.out", "w", stdout);
	
	unsigned int n, p;
	
	scanf("%u%u", &n, &p);
	
	printf("%u\n", log_exp(n, p));
	
	return 0;
}