Cod sursa(job #241241)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 9 ianuarie 2009 17:37:49
Problema Ridicare la putere in timp logaritmic Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.51 kb
#include <stdio.h>
#include <string.h>

const int n_max = 10001;
const int m = 1999999973;

int main()
{
 unsigned 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=1;(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;
}