Cod sursa(job #153636)

Utilizator ScrazyRobert Szasz Scrazy Data 10 martie 2008 17:26:28
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include <stdio.h>
#define mod 1999999973

long long n, p;

long long lgput(long long n, long long p)
{
	if (p==0) return 1;
	if (p==1) return n%mod;
	if (p==2) return (n*n)%mod;
	if (p&1)
	{
		long long x=lgput(n, p/2)%mod;
		return (n*x*x)%mod;
	}
	else
	{
		long long x=(lgput(n, p/2))%mod;
		return (x*x)%mod;
	}
}


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

	scanf("%lld%lld", &n, &p);

	//printf("%lld", (lgput(n,p))%mod);

	long x=n,sol=1;
	while (p)
	{
		if (p&1)
		{
			sol=(sol*x)%mod;
			--p;
		}
		x=(x*x)%mod;
		p/=2;
	}

	printf("%lld", sol%mod);

	fclose(stdin);
	fclose(stdout);

	return 0;

}