Необходимо найти целые числа, равное сумме всех своих собственных делителей, кроме самого себя в диапазоне 1 до 1000

function getDivisors(num) {
    let arrDivisors = [];
    for(let i = 2; i < num; i++) {
        if(num % i === 0) {
            arrDivisors.push(i)
        }
    }
    return arrDivisors;
}



function getSum(arr) {
    let strArr = String(arr).split(',')
    let sum = 0;
    for(nums of strArr) {
        sum += Number(nums)
    }
    return sum;
}




function getPerfect(num1, num2) {
    let arr = [];
    for(let i = num1; i < num2; i++) {
        let perfectNum = getSum(getDivisors(i))
        if(getDivisors(i)) {
            arr.push(perfectNum)
        }
        
    }
    return arr;
}

console.log(getPerfect(1, 1000));

// Моя логика в функции getPerfect следущая:

// 1. Создаю массив куда будут складываться совершенные числа
// 2. Запускаю цикл с заданным диапазоном
// 3. Создаю переменную которая вычисляет совершенное число из раннее созданных функций.
// 4. Если getDivisors(i) === true, то пушу числа в массив

Ответы (1 шт):

Автор решения: MBo

1 считается за делитель при поиске совершенных чисел, так что в getDivisors цикла нужно начинать с единицы или сразу её в массив засовывать

Зачем массив переводить в строку и из неё вычленять числа в getSum - это какие-то JS-заморочки или что? Просто сложите элементы arr (или используйте модный reduce)

Логика в getPerfect странная. Достаточно этого:

 for(let i = num1; i < num2; i++) {
    if(getSum(getDivisors(i)) == i) {
        arr.push(i)
    }
→ Ссылка