Распечатайте список, в порядке возрастания и без дубликатов, натуральных чисел, у которых нет простого множителя, кроме 2, 3 или 5

Это вопрос программирования моей домашней работы для одного из моих курсов. Я не программировал пару лет, и я не был таким уж замечательным с самого начала. Сейчас я прохожу учебные курсы, чтобы вернуться к скорости, но это займет некоторое время. Если вы, ребята, можете помочь мне с этой проблемой, я был бы очень признателен.

Ограничения:

Каждый член этой последовательности является положительным целым числом вида 2^i*3^j*5^k, для всех неотрицательных целых чисел i, j, and k сi + j + k >= 1.

Не могу использовать массивы. Алгоритм решения этой проблемы должен предусматривать повторное создание и объединение списков. конкретно 5 lists; a final list, temp list, and three term lists,

"Окончательный список увеличивается путем слияния с текущим временным списком. Временной список, в свою очередь, заменяется слиянием трех списков терминов. Новые списки терминов создаются путем умножения нового временного списка на 2, 3, and 5 respectively"

Желаемая последовательность будет выглядеть следующим образом: 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, . . .

1 ответ

Решение

Как вы объяснили в своем вопросе, вы можете сделать свой алгоритм рекурсивно.

На шаге n:

Финальный список будет представлять набор F(n) = {m | m = 2^i*3^j*5^k, 1<=i+j+k<=n}

Временной список будет представлять набор T(n) = {m | m = 2^i*3^j*5^k, i+j+k=n}

Тогда список терминов "L2" будет L2(n) = 2*T(n-1)

список терминов "L3" будет L3(n) = 3*T(n-1)

список терминов "L5" будет L5(n) = 5*T(n-1)

Чтобы получить Т, T(n) = merge(L2(n), L3(n), L5(n))

Чтобы получить F, F(n) = merge(F(n-1), T(n))

Получив это, вы должны реализовать функцию объединения двух списков. В основной функции вам просто нужно перевести их на Java.

Вы также можете сделать списки всегда отсортированными, чтобы объединение было простым и эффективным! В Java, я думаю, вы можете использовать LinkedList или ArrayList, оба работают нормально.

В конце концов, это твоя домашняя работа.

Другие вопросы по тегам