Cod sursa(job #504552)

Utilizator printesoiDodon Victor printesoi Data 28 noiembrie 2010 03:27:29
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.43 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()
{
	int N,p,mod=1999999973;

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

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