Ответы пользователя по тегу Алгоритмы
  • Как усовершенствовать алгоритм для уравнения Диофанта?

    @Sun_Day
    Во-первых, у вас в корне неверное решение, хотя бы потому что не соответствует условию:

    find all integers
    Тут же тест:
    solEquaStr(90005) --> "[[45003, 22501], [9003, 4499], [981, 467], [309, 37]]"


    Ваше решение вернет лишь первый и единичный случай. Нужно вернуть все.
    Поэтому, цикл вайл тут тоже не подойдет.
    Во-вторых, у вас неверное условие итерации. Нужно итерироваться iterator <= sqrt(N) (или pt1 <= sqrtN в вашем решении)
    Нецелых чисел может быть очень много, особенно для больших чисел, поэтому по условию нужно вернуть целые числа(isInteger). Если при итерации не будет пары целых чисел, то решений нет, возвращаем пустой массив.

    Ну и двигать поинтеры - тоже в корне неверно, нужно искать x,y.
    x = (d + i) / 2;
    y = (d - i) / 4

    Решение выше вполне норм. Вот что-то похожее.

    function solequa(n) {
        const sqrtN = Math.sqrt(n);
        const result = [];
        let x, y, d;
        for (let i = 1; i <= sqrtN; i++) {
            d = n / i;
            x = (d + i) / 2;
            y = (d - i) / 4
            if (Number.isInteger(x) && Number.isInteger(y)) {
                result.push([x, y]);
            }
        }
        return result;
    }
    Ответ написан
    Комментировать