PKU 1411 Calling Extraterrestrial Intelligence Again

http://poj.org/problem?id=1411
整数m,a,bが与えられる。
このとき、p*q<=m かつ a/b <= p/q <= 1 かつ p*qが最大となるような素数の組p,qを求めろというような問題。

これもやるだけだから今度はpascalでやってみようと思ったら、言語仕様につまずいて疲れました。

pkuで運用されているfree pascalではintegerが16bitなのに、自分の手元にgnu pascalしかないので(それは32bit?)、それで動くことを確認してサブミットしてもruntime errorになってしまって、理由の特定に苦労しました。

コードの書き方も最初からやろうとするとよく分からなかったので、一旦C++で書いてぐぐりながらPascalに書き換えながらやってました。

program p1411(Input,Output);
var
   m,a,b           : longint;
   p,q,sz          : longint;
   pr              : array[0..1000000] of boolean;
   npr             : array[0..1000000] of longint;
   i,j,ap,aq,bi,ai : longint;

begin
   sz:=0;
   for i:=0 to 100000 do  pr[i]:=False;

   for i:=2 to 100000 do
      begin
         if pr[i]=True then continue;
         npr[sz]:=i;
         sz:=sz+1;
         j:=i*2;
         while j<=100000 do
            begin
               pr[j]:=True;
               j:=j+i;
            end;
      end;
   
   read(m,a,b);
   while (a<>0) and (b<>0) and (m<>0) do
      begin
         ap:=2;
         aq:=2;
         for bi:=0 to sz-1 do
            for ai:=0 to bi do
               begin
                  p:=npr[ai];
                  q:=npr[bi];
                  if p*q>m then break;
                  if a*q>b*p then continue;
                  if p*q>ap*aq then
                     begin
                        ap:=p;
                        aq:=q;
                     end;
               end;
         writeln(ap,' ',aq);
         read(m,a,b);
      end;
end.