Функция нахождения дружественных чисел в заданном интервале.
Ребят, привет! Решаю задачи по написанию функций, но со следующей задачей зашёл в тупик.
Сделайте функцию getFreindly, которая будет находить пары дружественных чисел в заданном промежутке и возвращать их в виде двухмерного массива вида [ [220, 284], [1184, 1210], [2620, 2924] ]. С помощью созданной функции найдите все пары дружественных чисел на промежутке от 1 до 9000. Вот моё решение: alert(Freindly(1, 9000)); function Freindly(num1, num2){ let arr=[[]]; let sum1 = getSum(getOwnDivisors(num1)); let sum2 = getSum(getOwnDivisors(num2)); for(let i=0; i<=2; i++){ arr.push([i]); for(let j=num1; j<num2; j++){ if(sum1==num2&&sum2==num1){ arr.push([i][j]); } } return arr; } } function getOwnDivisors(num){ let result=[]; for(let i=1; i<9000; i++){ if (9000 % i==0){ result.push(i); } } return result; } function getSum(arr){ String(arr).split(''); let sum=0; for(elem of arr){ sum+= Number(elem); } return sum; } Вот чувствую, что я что-то не так делаю, намудрил может быть лишнего, потому и в тупик зашёл. Что в моём решении не так? Подскажите правильное решение. |
Gm5,
<script> function Freindly(min, max) { const obj = {}; for (let i = min; i <= max; i++) { obj[i] = getSum(i); } return Object.entries(obj) .filter(([a, b], i) => obj[b] && obj[b] == a && a != b ) .filter((_, i) => i % 2 === 0) .map(([a, b]) => [+a, b]); } function getSum(num) { let end = num/2, sum = 0; for (let i = 1; i <= end; i++) { if (num % i === 0) sum += i; } return sum; } let x = Freindly(1, 9000); document.write(JSON.stringify(x)) </script> |
Gm5,
или так ... <script> function Freindly(min, max) { const arr = []; let e; for (let i = min; i <= max; i++) { let a = getSum(i), b = getSum(a); if(i === b && i != a && (e = !e)) arr.push([i, a]) } return arr } function getSum(num) { let end = num/2, sum = 0; for (let i = 1; i <= end; i++) { if (num % i === 0) sum += i; } return sum; } let x = Freindly(1, 9000); document.write(JSON.stringify(x)) </script> |
рони,
СПАСИБО!:thanks: |
рони,
прокомментируйте пожалуйста в этой строке if(i === b && i != a && (e = !e)) arr.push([i, a]) для чего нужно (e = !e). Я понял ,что это помогает не дублировать дружественные числа в массиве с обратной стороны, но как это работает??? ))) |
Цитата:
|
Часовой пояс GMT +3, время: 00:17. |