📄 arctan2.pas
字号:
const
finp = 'arctan.in';
fout = 'arctan.out';
var
a, bc: int64;
procedure main;
var
p, k, q, l, s, sqrts: int64;
d: array[byte] of int64;
procedure search(idx, mul: int64; last: boolean);
var
u, v, t: int64;
begin
if 1.0 * mul * mul > 1.0 * p then exit;
if idx > l then begin
u := mul;
v := p div u;
t := (v - u) div 2;
if t * 2 = (v - u) then
if t < s then begin
s := t; sqrts := (v + u) div 2;
end;
exit;
end;
if last or (d[idx - 1] <> d[idx]) then search(idx + 1, mul * d[idx], true);
search(idx + 1, mul, false);
end;
begin
p := 4 * a * a + 4;
k := 2; q := p; l := 0; d[l] := 0;
while k <= sqrt(q) do begin
while q mod k = 0 do begin
l := l + 1; d[l] := k; q := q div k;
end;
k := k + 1;
end;
if q <> 1 then begin
l := l + 1; d[l] := q;
end;
s := maxlongint; s := s * 16;
search(1, 1, false);
bc := 2 * a + sqrts;
end;
begin
assign(input, finp); reset(input);
readln(a);
close(input);
main;
assign(output, fout); rewrite(output);
writeln(bc);
close(output);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -