Cod sursa(job #973617)

Utilizator the_chosen_oneCristian Badea the_chosen_one Data 14 iulie 2013 21:19:13
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<stdio.h>
#include<math.h>
FILE *Fin=fopen("lgput.in","r"), *Fout=fopen("lgput.out","w");
long long a,b,p=1999999973;
long long f;
long long exp(long long x, long long n)
{
	if(n<0)
		return exp(1/x,-n);
	else
		if(n==0)
			return 1;
		else
			if(n==1)
				return x;
			else
				if(n%2==0)
					return (exp(x*x,n/2))%p;
				else
					return x%p*exp(x*x,(n-1)/2)%p;
}
/*
int main ()
{
	fscanf(Fin,"%d",&x);
	fscanf(Fin,"%d",&p);
	if(p%2==1 && p>2)
		a=x*(long long)pow(x*x,(p-1)/2);
	else
		if(p!=0)
			a=(long long)pow((x*x),(p/2));
	if(x<y)
		fprintf(Fout,"%lld",a);
		//printf("%lld",a);
	else
		fprintf(Fout,"%lld",a%y);
	fclose(Fin);
	fclose(Fout);
	return 0;
}
*/

int main(){
	fscanf(Fin,"%lld%lld",&a,&b);
	f = exp(a,b);
	fprintf(Fout,"%lld",f);
	return 0;
}