Cod sursa(job #845943)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 31 decembrie 2012 21:21:36
Problema Ridicare la putere in timp logaritmic Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 0.6 kb
program ridicare_la_putere_logaritmica;
  const modulo=1999999973;
  var f:text;
      n,p,rez:int64;
      a,b:array[0..32] of int64;
      i:byte;
begin
  assign(f,'lgput.in');
  reset(f);
  readln(f,n,p);
  close(f);
  assign(f,'lgput.out');
  rewrite(f);
  a[0]:=1;
  for i:=1 to 32 do a[i]:=a[i-1]*2;
  b[0]:=n mod modulo;
  for i:=1 to 32 do b[i]:=sqr(b[i-1]) mod modulo;
  rez:=1;
  i:=32;
  while i>0 do
    begin
      while p>=a[i] do
        begin
          rez:=(rez*b[i])mod modulo;
          p:=p-a[i];
        end;
      dec(i);
    end;
  writeln(f,rez);
  close(f);
end.