спасибо огромное друг мой очень сильно помог
|
по ошибке отправил
|
Цитата:
|
Попробовал до 100 000.
Нашлось еще одно число - 8128 :) Но удивительно не это. Удивительно, что Хром считает это за 8,2 - 8,4 с А Файрфокс за 7,6 - 7,8 И где хваленая оптимизация? |
voraa,
:) |
Цитата:
слегка оптимизировал вариант рони, стало работать за 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; } |
Alexandroppolus,
спасибо, думал над вариантом Math.sqrt, но не сообразил как второй сомножитель сохранить. :thanks: |
Вообще эти штуки называются "совершенные числа"
https://ru.wikipedia.org/wiki/%D0%A1...81%D0%BB%D0%BE Они все имеют вид 2^p * (2*2^p - 1), где выражение в скобках должно быть простым. Точнее, это для четных совершенных. А нечетных возможно и нет вовсе. То есть искать такие числа можно намного быстрее - просто брать (2*2^p - 1) и проверять что оно простое. |
Alexandroppolus,
:thanks: |
Часовой пояс GMT +3, время: 06:11. |