Pagini recente » Cod sursa (job #2515893) | Cod sursa (job #2043452) | Cod sursa (job #927330) | Cod sursa (job #230671) | Cod sursa (job #1461673)
/**
Ridicare la putere in timp logaritmic:
Metoda 1: plecam de la numarul de ridicat shi, atunci cind puterea la care trebuie sa-l
ridicam este para, il putem reduce la ridicarea la patrat a valorii obtzinute prin
injumatatzire, pe cind atunci knd este impara, il putem reduce la inmulzitrea dintre el
shi puterea la care trebuie sa-l ridicam minus 1.
Ashadar luam mai intii puterea shi vedem care este succesiunea de operatzii care trebuie facute
(le memoram intr-un vector) shi apoi, pe baza lor, refacem invers calculele
*/
#include <fstream>
using namespace std;
int pl(int n,int p)
{
char op[100],nop=0;
long long rez=1;
while(p)
{
if(p%2==0)
{
op[++nop]=0;
p/=2;
}
else
{
op[++nop]=1;
p--;
}
}
while(nop)
{
if(op[nop])
rez=(rez%1999999973*(n%1999999973))%1999999973;
else
rez=(rez%1999999973*(rez%1999999973))%1999999973;
nop--;
}
return rez;
}
int main()
{
int n,p;
ifstream fin("lgput.in");
fin>>n>>p;
ofstream fout("lgput.out");
fout<<pl(n,p);
return 0;
}