Cod sursa(job #216286)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 23 octombrie 2008 20:13:40
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.7 kb
#include<stdio.h>
#define modulo 1999999973
long long n,p;

long long putere(long long n, long long p, long long r)
	{
	if(!p) return 1; //returnam 1 deoarece orice numar la puterea 0 este 1
	if(p%2) //daca exponentul este impar
		return (n*putere(n,p-1,r))%r; //returnam restul impartirii n*n^(p-1) la r
	//p este un numar par
	long long x;
	x=putere(n,p/2,r); //x primeste restul impartirii n^(p/2) la r
	return (x*x)%r; //returnam restul lui x*x la r, adica restul impartirii (n^(p/2))^2 la r
	}

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

scanf("%lld %lld",&n,&p);
printf("%lld",putere(n,p,modulo));

fclose(stdin);
fclose(stdout);

return 0;
}