Тема: JavaScript cycle
Показать сообщение отдельно
  #16 (permalink)  
Старый 03.02.2022, 20:28
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от voraa
Попробовал до 100 000.
Удивительно, что Хром считает это за 8,2 - 8,4 с
у меня вообще за 15 с.

слегка оптимизировал вариант рони, стало работать за 90 мс - limit теперь sqrt(i)
function findHappiness(start, end) {
    const arr = [];
    for (let i = start; i <= end; i++) {
        let sum = 1,
            limit = Math.sqrt(i);
        for (let j = 2; j <= limit; j++) {
            if (i % j === 0) {
                const k = i / j;
                sum += j + (k === j ? 0 : k);
            }
        }
        if (sum === i) {
            arr.push(i)
        }
    }
    return arr;
}
Ответить с цитированием