Cod sursa(job #150201)

Utilizator radamiRadu Patulescu radami Data 6 martie 2008 18:48:54
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include <stdio.h>

#define m 1999999973

long long n,p;
int putere (int n,int p)
{
	if (p == 0)
		return 1;
	else
		if (p % 2 == 0)
			return putere(n*n,p/2) % m;
		else
			return (n * putere(n*n,(p-1) / 2)) % m;
	
	
}


int main ()
{
	freopen("lgput.in","r",stdin);
	freopen("lgput.out","w",stdout);
	
	scanf("%lld %lld",&n,&p);
	long long x = p,nr_cif = 0;
	//printf("%d",putere(n,p));
	while (x)
	{
		nr_cif ++;
		x = x/2;
		
	}
	
	x = p;
	long long a = n,r = 1;
	while (x)
	{
		if (x % 2 != 0)
			r = (r * a) % m;
		a = (a * a) % m; 
		x = x / 2;
		
		
	}
	printf("%lld ",r);
	
	return 0;
}