Cod sursa(job #504551)

Utilizator printesoiDodon Victor printesoi Data 28 noiembrie 2010 03:24:40
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.44 kb
#include<stdio.h>
#include<math.h>

unsigned long int sqr(unsigned long int nr)
{
	return nr*nr;
}

unsigned long int lgput(int N,int p)
{
	if (p==0) return 1;
	if (p<0) return 1/lgput(N,-p);
	if (p%2) return N*sqr(lgput(N,(p-1)/2));
	return sqr(lgput(N,p/2));
}

int main()
{
	unsigned long int N,p,mod=1999999973;

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

	scanf("%lu%lu",&N,&p);
	printf("%lu",lgput(N,p)%mod);
	return 0;
}