Cod sursa(job #169271)

Utilizator sanaDascalu Laurentiu sana Data 1 aprilie 2008 15:22:10
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator c Status done
Runda Arhiva educationala Marime 0.46 kb
#include <stdio.h>
#include <stdlib.h>

#define M 1999999973

long int mypow(unsigned int base, unsigned int p) {
	long rez=1;
	while (p>0) {
		if ((long)(p&1)==1)
			rez=(rez*base)%M;
		base=(base*base)%M;
		p>>=1;
	}
	return rez;
}

int main() {
	unsigned long int n, p;
	FILE *fin, *fout;

	fin=fopen("lgput.in", "rt");
	fout=fopen("lgput.out", "wt");

	fscanf(fin, "%ld %ld", &n, &p);
	fprintf(fout, "%ld", mypow(n, p));
	fclose(fout);
	fclose(fin);

	return 0;
}