POWER - Lũy thừa

Tác giả: RR

Ngôn ngữ: Pascal

{$R+,Q+}
const
  oo=1000000000000;
  max:array[1..40] of int64=
(oo,1000000,10000,1000,252,100,52,32,22,16,13,10,9,8,7,6,6,5,5,4,4,4,4,4,4,3,
 3,3,3,3,3,3,3,3,3,3,3,3,3,2);
var
  k,x,y:int64;
  test,t:longint;
function power(x,k:int64):int64;
var
  kq,m:int64;
begin
  if k=0 then exit(1)
  else if k=1 then exit(x);
  m:=k div 2;
  kq:=power(x,m); kq:=kq*kq;
  if k mod 2=0 then exit(kq)
  else exit(kq*x);
end;
procedure solve;
var
  l,r,mid,p:int64;
  kk:longint;
begin
  for kk:=40 downto 1 do
    begin
      l:=1; r:=max[kk]+1;
      if kk=12 then
        begin
          write('');
        end;
      repeat
        mid:=(l+r) div 2;
        p:=power(mid,kk);
        if (x<=p) and (p<=y) then
          begin
            k:=kk;
            exit;
          end;
        if p>y then r:=mid
        else l:=mid;
      until r-l<=1;
    end;
end;
begin
  readln(t);
  for test:=1 to t do
    begin
      readln(x,y);
      solve;
      writeln('Case #',test,': ',k);
    end;
end.

Download