Cod sursa(job #540595)

Utilizator dragosd2000Dumitrache Dragos dragosd2000 Data 24 februarie 2011 08:58:16
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.49 kb
#include<fstream.h>

ifstream fin("lgput.in");
ofstream fout("lgput.out");
const int n_max=10001;//definim numarul maxim de cifre al numerelor
const int m=1999999973;
int main()
{
	unsigned int i,n,p;
	long long a,sol=1;
	fin>>n>>p;
	a=n;
	for(i=0;(1<<i)<=p;i++)	// luam toti biti lui p la rand
	{
		if(((1<<i)&p)>0)// daca bitui i din p este 1 atunci adaugam n^(2^i) la solutie
			sol=(sol*a)%m;
		a=(a*a)%m;// inmultim a cu a ca sa obtinem n^(2^i+1);
	}
	fout<<sol<<'\n';
	return 0;
}