Cod sursa(job #149808)

Utilizator Darth_NiculusIvan Nicolae Darth_Niculus Data 6 martie 2008 09:16:29
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <stdio.h>

#define INPUT  "lgput.in"
#define OUTPUT "lgput.out"
#define powe(n) ((n)*(n))
#define expo(n) ((n % 2 == 0) ? (n/2) : ((n-1)/2))
#define constanta (199999973)

long long power(long long p, long long n)
{
 if (n == 0) return 1;
   else if (n % 2 == 0)
	  return ((power(powe(p),expo(n))) % constanta);
   else return ((p*power(powe(p),expo(n))) % constanta);
}

int main()
{
 freopen(INPUT,"r",stdin);
 freopen(OUTPUT,"w",stdout);

 long long n,p;
 scanf("%lld%lld",&p,&n);
 printf("%lld",power(p,n));

 fclose(stdin);
 fclose(stdout);
 return 0;
}