Cod sursa(job #706673)
Utilizator | Data | 5 martie 2012 19:50:14 | |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.38 kb |
#include <cstdio>
#define MAX 1999999973
int main()
{
freopen("lgput.in","rt",stdin);
freopen("lgput.out","wt",stdout);
long long n,a,y=1,x,k,step;
scanf("%I64d %I64d",&a,&n);
while(n)
{
x=a;
for(step=1,k=0;step<=n;step<<=1,k++);
k--;
step>>=1;
for(long i=1;i<=k;i++)
x*=x,x%=MAX;
n-=step;
y*=x,y%=MAX;
}
printf("%I64d\n",y);
}