Cod sursa(job #981230)

Utilizator daniel.amarieiDaniel Amariei daniel.amariei Data 6 august 2013 16:26:54
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 0.76 kb
#include <stdio.h>
#define DIV 1999999973

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

	return exp;
}


long long pow2(long long n, long long p)
{
	if (p == 0) 	return 1;
	if (p == 1)		return n;

	if (p%2) 
		return n * pow2(n * n % DIV, p / 2) % DIV;
	else
		return pow2(n * n % DIV, p / 2) % DIV;
}

long long pow3(long long n, long long p)
{
	long long x1 = x;
	long long x2 = x * x;
	
	while (p)
	{
		if (p & 1)
		{	
			x1 = x1 * x2 % DIV;
			x1 = x1 * x2 % DIV;
		}
		else
		{
			x2 = x2 * x1 % DIV;
			x1 = x1 * x1 % DIV;
	}

	return x1;
}

int main()
{
	unsigned N, P;

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

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

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