Cod sursa(job #256725)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 12 februarie 2009 06:28:56
Problema Ridicare la putere in timp logaritmic Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.47 kb
#include <stdio.h>
#include <string.h>

const long m = 1999999973;

int main()
{
 long int i,n,p;
 long long a,sol=1;

 freopen("lgput.in","r",stdin);
 freopen("lgput.out","w",stdout);

 scanf("%d %d", &n, &p);

 a=n;

 for(i=0;(1<<i)<=p;++i)
 {
  if ( ((1<<i) & p) > 0) // Daca bitul 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))
 }
 printf("%lld\n", sol); 

 return 0;
}