алгоритм удаления общих элементов из разных списков в программе ниже - PullRequest
0 голосов
/ 22 февраля 2020

Это код для оценки факторов заданного целочисленного массива. Проблема в том, что мне нужно найти LCM из списка, который я получил в качестве вывода. Предложите что-нибудь для удаления повторяющихся элементов из списка

Основной метод

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int [] ar = {6,12,36};
        for (int a:
             ar) {
            System.out.println(getFactor(a));
        }

getFactor (long) возвращает список факторов

private static List<Integer> getFactor(long n) {
        List<Integer> l = new ArrayList<>();
        for (int i=2;n!=1;i++)
        {
            if(n%i==0)
            {
                l.add(i);
                n=n/i;
                i=1;
            }
        }
        return l;
    }

/*Input
6,12,36
Output
[2, 3]
[2, 2, 3]
[2, 2, 3, 3]*/

Задача удалить дубликаты [2,3] из других списков, чтобы получить LCM (наименьшее общее кратное).

Ответы [ 2 ]

1 голос
/ 22 февраля 2020

Предложить что-нибудь для удаления дублирующихся элементов из списка

Использовать Set вместо List

private static Set<Integer> getFactor(long n) {
    Set<Integer> l = new HashSet<>();
    for (int i = 2; n != 1; i++) {
        if (n % i == 0) {
            l.add(i);
            n = n / i;
            i = 1;
        }
    }
    return l;
}

Вывод:

[2, 3]
[2, 3]
[2, 3]

Рекомендуемое прочтение: В чем разница между Set и List?

1 голос
/ 22 февраля 2020

Нет, где в вашем коде вы рассчитываете lcm. Все, что я вижу, это то, что вы нашли факторы трех чисел.

[2, 3]   -> Factors of 6
[2, 2, 3] -> Factors of 12
[2, 2, 3, 3] -> -> Factors of 6

Вам нужно написать другую функцию для вычисления lcm.

...