|
|
back to boardCommon BoardHelp! Why does my program get CE? (Problem 1118) Posted by LJSC 19 Oct 2002 17:42 var pr: array[1..400]of integer; prcnt: integer; function ispr(a: longint): boolean; var i: integer; begin ispr := false; for i := 1 to prcnt do if a div pr[i] < pr[i] then break else if a mod pr[i] = 0 then exit; ispr := true; end; function trivial(v0: longint): extended; var i, l: longint; k, kk: comp; begin l := v0; k := 1; for i := 1 to prcnt do if v0 div pr[i] < pr[i] then break else if v0 mod pr[i] = 0 then begin kk := pr[i]; while v0 mod pr[i] = 0 do begin kk := kk * pr[i]; v0 := v0 div pr[i]; end; kk := (kk - 1) / (pr[i] - 1); k := k * kk; end; if v0 > 1 then k := k * (comp(v0) * v0 - 1) / (v0 - 1); trivial := k / l; end; var i, j, res, res2, bak: longint; ee, ss: extended; begin pr[1] := 2; prcnt := 1; i := 3; while i < 1010 do begin if ispr(i) then begin inc(prcnt); pr[prcnt] := i; end; inc(i); end; readln(i, bak); j := bak; if i < 2 then begin writeln('1'); exit; end; res2 := 0; while j >= i do begin if ispr(j) then begin res2 := j; break; end; dec(j); end; j := bak; ss := 1e200; while(j >= i)and(j > res2)do begin ee := trivial(j); if ee < ss then begin ss := ee; res := j; end; dec(j); end; writeln(res); end. |
|
|