Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JavaScript cycle (https://javascript.ru/forum/misc/83632-javascript-cycle.html)

Harut97 29.01.2022 14:23

спасибо огромное друг мой очень сильно помог

Harut97 29.01.2022 14:24

по ошибке отправил

рони 29.01.2022 14:58

Цитата:

Сообщение от Harut97
findHappiness(start, end ) что должна делать эта функция?

функция должна вернуть массив чисел из диапазона от start до end которые подходят под условие счастливые

voraa 29.01.2022 17:40

Попробовал до 100 000.
Нашлось еще одно число - 8128 :)
Но удивительно не это.
Удивительно, что Хром считает это за 8,2 - 8,4 с
А Файрфокс за 7,6 - 7,8

И где хваленая оптимизация?

рони 29.01.2022 17:43

voraa,
:)

Alexandroppolus 03.02.2022 20:28

Цитата:

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

рони 03.02.2022 23:34

Alexandroppolus,
спасибо, думал над вариантом Math.sqrt, но не сообразил как второй сомножитель сохранить. :thanks:

Alexandroppolus 04.02.2022 02:47

Вообще эти штуки называются "совершенные числа"

https://ru.wikipedia.org/wiki/%D0%A1...81%D0%BB%D0%BE

Они все имеют вид 2^p * (2*2^p - 1), где выражение в скобках должно быть простым. Точнее, это для четных совершенных. А нечетных возможно и нет вовсе.
То есть искать такие числа можно намного быстрее - просто брать (2*2^p - 1) и проверять что оно простое.

рони 04.02.2022 07:59

Alexandroppolus,
:thanks:


Часовой пояс GMT +3, время: 06:11.