Необходимо найти целые числа, равное сумме всех своих собственных делителей, кроме самого себя в диапазоне 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)
}