Задача: нужно написать функцию, которая выводит кол-во четных чисел в диапазоне от x до y. Например (6,11) Ответа: 3 т.к. 6, 8 и 10.
Мое решение:
function divisibleCount(x,y,k){
var answer = 0;
for(var i = x; i <= y; i+=2){
answer++;
}
return answer;
}
Мое решение не прошло по причине низкой производительности (на больших цифрах очень долгие вычисления );
Вот код с очень высокой производительностью.
function divisibleCount(x, y, k) {
var first = Math.ceil(x / k) * k;
if (first > y) return 0;
return parseInt((y - first) / k) + 1;
}
Вопросы:
1)Почему мой код такой медленный? Насколько я знаю, циклы должны работать быстро, а такое чувство, как будто вычисления производятся через рекурсию
2)Объясните пожалуйста решение, указанное выше. Математической формулы для вычисления я не нашел,а может и нашел, но не понял т.к. с математикой у меня проблемы(я пытаюсь это исправить).