Алекс77 писал(а):
VAL писал(а):
Однако при малых n (или большом различии между

) моим способом быстрее получается.
Впрочем, при малых n не сложно и вручную решить

Одна просьба, можно чуть-чуть поподробней описать алгоритм, скажем так, для чайника?
А зачем?
Насчет того, что моим методом будет считаться быстрее, чем у
maxalа, я шутил.
Впрочем, мне не жалко. Вот код на Maple (на другом в последнее время не пишу

)
Код:
mindiff := proc(L)
local n, m, p, pr, s, i, j, c, st, St;
n := nops(L);
pr := mul(L[j], j = 1 .. n);
c := evalf(sqrt(pr));
m := pr;
St := [[L[1], 2]];
do
st := St[-1];
s := st[1];
i := st[2];
if c < s or n < i then
if abs(s - c) < m then m := abs(s - c); p := s
end if;
St := [St[j] $ (j = 1 .. nops(St) - 1)];
if St = [] then break end if;
St[-1][2] := St[-1][2] + 1;
s := St[-1][1];
if c - s < m then m := c - s; p := s end if
else St := [op(St), [s*L[i], i + 1]]
end if
end do;
[pr/p, p]
end proc
А вот пример обращения (восьмерка, пркедставляется в виде произведения четверки и двойки):
Код:
mindiff([37,17,11,7,5,4,3,2]);
[2380, 2442]