Cod sursa(job #405654)

Utilizator zseeZabolai Zsolt zsee Data 28 februarie 2010 15:22:09
Problema Ridicare la putere in timp logaritmic Scor 20
Compilator fpc Status done
Runda Arhiva educationala Marime 0.7 kb
program hatvanyoz;
const maradek = 1999999973;
var n,p:qword;
    ki,be:text;

function hatvanyoz(hatvany:qword):qword;
var x:qword;
begin
  if hatvany = 1 then hatvanyoz := (n mod maradek)
    else
      if hatvany = 2 then
       begin
        hatvanyoz:= (n*n) mod maradek;
        exit;
       end;
  if hatvany mod 2 = 0 then
     begin
      x:=hatvanyoz(hatvany div 2);
      hatvanyoz:=(x*x) mod maradek;
     end
      else
     begin
      x:=hatvanyoz( (hatvany-1) div 2);
      hatvanyoz:= (x*x*n) mod maradek;
     end;
end;

begin
 assign(be,'lgput.in');
 assign(ki,'lgput.out');
 reset(be);
 rewrite(ki);
 readln(be,n,p);
 writeln(ki,hatvanyoz(p));
 close(ki);
end.