Сокращаем количество проходов в 2 раза:
Код:
var
i,fack: Int64;
n,k: Integer;
begin
fack:=1;
Readln(n);
for k:=2 to n do
fack:=fack*k;
k:=2;
i:=2;
while i <= fack div 2 do begin
if (fack mod i) = 0 then
inc(k);
inc(i);
end;
Writeln(k);
end.
На больших значениях fack переменная типа integer никогда не доберётся до максимального значения (пример - fack = 14! = 87 178 291 200, Integer = -2 147 483 648..2 147 483 647). I тоже должна быть Int64. Но int64 не работает в циклах for-do, так что извращаемся.