Показать сообщение отдельно
  #11 (permalink)  
Старый 30.09.2017, 13:01
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от Gtfuc Посмотреть сообщение
Каким образом можно оптимизировать производительность вычисления? Если увеличить количество слагаемых в выражении?('45!*63!*28!*55!!*35!!*45!!*25 !!*65!!*50!!*40!!*95!!*25!*45!*63!*28!*55!!'). До какого максимального предела строки можно вычислять, зависит от аппаратной мощности или как?
Вычислять можно строки с большим количеством больших чисел.

Вот функции
function getFactNums(x, n){
  var z = 0;
  while(x){
    x = (x/n)|0;
    z+=x;
  }
  return z;
}

function getFF2(x) {
  return x % 2 ? 0 : getFactNums(x, 2);
}

function getFF5(x) {
  var c2 = getFactNums(Math.floor(x/2), 5);
  return x % 2 ? getFactNums(x, 5) - c2 : c2;
}

var count2 = 0, count5 = 0;

Далее для всех множителей вида N! или N!! получаешь количество в них двоек (для N! будет getFactNums(N, 2), для N!! - getFF2(N) ) и пятерок (соответственно getFactNums (N, 5) и getFF5(N) ), суммируешь в переменные count2 и count5.
Результат равен Math.min(count2, count5)
Ответить с цитированием