Cod sursa(job #302437)

Utilizator HaggisRanca Razvan Haggis Data 8 aprilie 2009 21:38:53
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.54 kb
#include<fstream>
using namespace std;
ifstream in("lgput.in");
ofstream out("lgput.out");
const int ma=1999999973;
const long long nr=1<<32;
long long v[1000],n,p,i,q,j,q1;

int main ()
{
	in>>n>>p;
	v[1]=n;
	i=1;
	q=1;
	do
	{
		v[++i]=(v[i-1]*v[i-1])%ma;
		q*=2;
	}
		while(q<=p);
	v[i]=0;
	i--;
	j=1;
	q/=2;
	q1=q;
	j=i;
	while(q1<p)
	if(q1+q/2<=p)
		{
			v[++i]=(v[i-1]*v[j-1])%ma;
			if(j!=1)
				j--;
			q1=q1+q/2;
			if(q!=1)
				q=q/2;
		}
	else
	{
		if(q!=1)
			q/=2;
		if(j!=1)
			j--;
	}
	out<<v[i];
}