Сообщение от 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)