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.