Cod sursa(job #396408)

Utilizator g3ppyStoian Vlad g3ppy Data 15 februarie 2010 11:37:21
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.58 kb
#include <stdio.h>
#define MD 1999999973
FILE *fin,*fout;

long n,p;

long powerzor (long n, long p)
{
	if (p == 0) return 1;
	
	long bit, aux;
	bit = p&1;
	
	if (bit == 0)
		{
			aux = (powerzor(n,p>>1)) % MD;
			return ( (aux * aux) % MD );
		}
	aux = powerzor(n, (p-1)>>1) % MD;
	return ( ( ( (n * aux) % MD ) * aux ) % MD );
}


int main()
{long rez;
	fin = fopen ("lgput.in","rt");
	fout = fopen ("lgput.out","wt");
	
	fscanf(fin,"%ld %ld\n",&n,&p);
	
	rez = powerzor(n,p);
	
	fprintf(fout,"%ld\n",rez);
	
	fclose(fin);
	fclose(fout);	
return 0;	
}