проблема именно в ф-ции факториала, именно при значении >33 она возвращает 0
если ее переработать так
Код:
function TfrmMain.Fact(n: int64): Int64;
begin
if n > 1 then
Result := n * Fact(n - 1)
else
Result := 1;
end;
то можно "поднять планку" немного выше