Показать сообщение отдельно
  #11  
Старый 21.10.2012, 22:41
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Сокращаем количество проходов в 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, так что извращаемся.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием