Cod sursa(job #157938)
Utilizator | Florea Mihai Alexandru mihai_florea | Data | 13 martie 2008 13:06:35 |
---|---|---|---|
Problema | Ridicare la putere in timp logaritmic | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.58 kb |
//Ridicare ala putere in timp logaritmic
#include <cstdio>
const int p=1999999973;
int x,n,i,j,r[40],p2max;//r[k]=restul impartirii lui x^2^k la p
long long a,rest;
int main(){
freopen("lgput.in","r",stdin);
freopen("lgput.out","w",stdout);
scanf("%d %d",&x,&n);
p2max=0;while ((1<<p2max)<=n) p2max++;
p2max--;r[0]=x%p;
for (i=1;i<=p2max;i++) {a=r[i-1];
a=(a*a)%p;
r[i]=a;}
rest=1;
for (i=0;i<=p2max;i++)
if ((1<<i)&n) rest=(rest*r[i])%p;
printf("%d",rest);
}