Veqtor
@Veqtor

Где ошибка в решении задачи?

Всем добрый день. Решаю задачи в учебнике JavaScript. Подвис на одной: "Сделайте функцию getFreindly, которая будет находить пары дружественных чисел в заданном промежутке и возвращать их в виде двухмерного массива следующего вида: [ [220, 284], [1184, 1210], [2620, 2924] ].
С помощью созданной функции найдите все пары дружественных чисел на промежутке от 1 до 3000."
Вот моё решение:
function getOwnDivisors (num) {
    let arr = [];
    for (let i = 0; i < num; i++) {
        if (num % i == 0) {
            arr.push(i);
        }
    }
    return arr;
}

function getSum (arr){
    let sum = 0;
    for (let elem of arr) {
        sum += Number(elem);
    }
    return sum;
}

function isFrendly (num1, num2) {
    let sum1 = getSum(getOwnDivisors(num1));
    let sum2 = getSum(getOwnDivisors(num2));
    return (num1 == sum2 && num2 == sum1);
}

function getFrendly () {
    let arr = [];
    for (let i = 0; i <= 3000; i++) {
        arr[i] = [];
        for (let j = 0; j <= 3000; j++) {
            if(i == getSum(getOwnDivisors(j))) {
                arr[i][j] = j;
            }
        }
    }
    console.log(arr);
}
getFrendly();

Интересует только функция getFrendly (т.к. остальные вроде рабочие). Не понимаю почему она не работает. Может подскажет кто-нибудь?
  • Вопрос задан
  • 1002 просмотра
Решения вопроса 1
@galaxy
Вы только в одну сторону проверяете: что число i равно сумме делителей j. У дружественных чисел это свойство взаимно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Ar2r90
которая будет находить пары дружественных чисел в заданном промежутке!!!

в заданном промежутке!!!

То есть функция должна принимать промежуток а не число!

function isFriendly(num1, num2) {
let sum1 = getSum(getOwnDivisors(num1))
let sum2 = getSum(getOwnDivisors(num2))

if (sum1 == num2 && sum2 == num1) {
return true
} else {
return false
}
}

function getOwnDivisors(num) {
let arr = []
for (let i = 1; i < num ; i++) {
if (num % i == 0) {
arr.push(i)
}
}
return arr
}

function getSum(arr) {
let sum = 0
for (let arrElement of arr) {
sum += arrElement
}
return sum
}

function getFriendly(numb1, numb2) {
let arr = []
for (let i = numb1; i < numb2; i++) {
for (let j = i + 1 ; j < numb2; j++) {
if (isFriendly(i, j)) {
arr.push([i,j])
}
}
}
return arr
}

console.log(getFriendly(1, 3000))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы