Cod sursa(job #299843)

Utilizator cristiprgPrigoana Cristian cristiprg Data 7 aprilie 2009 01:08:13
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
//#define MOD 1999999973
const long MOD = 1999999973;
long long n, p, a, b, val = 1;

long long power(long long n ,long long p)
{
	if (p == 0)
		return 1;
	else
		if (p % 2 == 1)
		{
			val = (n % MOD * power(n, p-1)) % MOD;
			return (n % MOD * power(n, p-1)) % MOD;
		}
		else
		{
			long chestie = power(n, p / 2) ;

			val = (chestie * chestie ) % MOD;
			return (chestie * chestie ) % MOD;
		}

}

int main()
{
	FILE *f = fopen("lgput.in", "r");
	fscanf(f, "%lld%lld", &n, &p);
	fclose(f);

	f = fopen("lgput.out", "w");

	if (n > 1)
		fprintf(f, "%lld", power(n, p));
	else
		if (n == 0)
			fprintf(f, "0\n");
		else
			fprintf(f, "1\n");

	fclose(f);

	printf("%ld", power(n, p));
//	printf("%d", val);

	return 0;
}