Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2021, 14:08
Gm5 Gm5 вне форума
Интересующийся
Отправить личное сообщение для Gm5 Посмотреть профиль Найти все сообщения от Gm5
 
Регистрация: 10.07.2021
Сообщений: 19

Функция нахождения дружественных чисел в заданном интервале.
Ребят, привет! Решаю задачи по написанию функций, но со следующей задачей зашёл в тупик.
Сделайте функцию 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;
}

Вот чувствую, что я что-то не так делаю, намудрил может быть лишнего, потому и в тупик зашёл. Что в моём решении не так? Подскажите правильное решение.
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2021, 15:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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>
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2021, 15:25
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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>
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2021, 16:41
Gm5 Gm5 вне форума
Интересующийся
Отправить личное сообщение для Gm5 Посмотреть профиль Найти все сообщения от Gm5
 
Регистрация: 10.07.2021
Сообщений: 19

рони,
СПАСИБО!
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2021, 19:50
Новичок на форуме
Отправить личное сообщение для Brava Посмотреть профиль Найти все сообщения от Brava
 
Регистрация: 13.10.2020
Сообщений: 4

рони,
прокомментируйте пожалуйста в этой строке
if(i === b && i != a && (e = !e)) arr.push([i, a])
для чего нужно (e = !e). Я понял ,что это помогает не дублировать дружественные числа в массиве с обратной стороны, но как это работает??? )))

Последний раз редактировалось Brava, 07.09.2021 в 20:06.
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2021, 20:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

Сообщение от Brava
но как это работает??? )))
true, false, true, false ... true сохраняем, false пропускаем.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вот такое задание, но я только в начале пути вэб разработки, подскажите как? Dixlofos Общие вопросы Javascript 31 22.10.2018 01:48
Посчитать интеграл заданной функции в заданном интервале MrFlatman Общие вопросы Javascript 1 21.02.2018 10:56
Своя функция сортировки чисел по возрастанию DivMan Серверные языки и технологии 1 11.06.2017 12:04
функция нахождения наименьшего делителя числа итеративный процесс Alexsandr Общие вопросы Javascript 18 03.06.2017 03:12
Функция запрета ввода определенных чисел типа 0,78... ArmaTiK Общие вопросы Javascript 1 11.10.2015 00:31