спасибо огромное друг мой очень сильно помог
|
по ошибке отправил
|
Цитата:
|
Попробовал до 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, время: 01:48. |