Дано: установить A = {a0, a1, ..., aN-1}
(1 ≤ N ≤ 100
) с 2 ≤ ai ≤ 500
.
Вопрос: найти сумму всех наименьших общих кратных (НОК) всех подмножеств A
размера не менее 2.
LCM набораB = {b0, b1, ..., bk-1}
определяется как минимальное целое число Bmin
такое, что bi | Bmin
для всех 0 ≤ i < k
.
Пример:
Пусть N = 3
и A = {2, 6, 7}
, тогда:
LCM({2, 6}) = 6
LCM({2, 7}) = 14
LCM({6, 7}) = 42
LCM({2, 6, 7}) = 42
----------------------- +
answer 104
Наивным подходом было бы простое вычисление LCM для всех O(2N)
подмножеств, что невозможно для достаточно больших N
.
Эскиз решения:
Задача получена на конкурсе*, который также предоставил схема решения. Вот где возникает моя проблема: я не понимаю намека на подход.
Решение гласит (по модулю некоторых небольших исправлений грамматики):
Решение немного сложное. Если мы внимательно посмотрим, то увидим, что целые числа находятся между
2
и500
. Итак, если мы разложим числа на простые множители, мы получим следующие максимальные степени:
2 8
3 5
5 3
7 3
11 2
13 2
17 2
19 2
Кроме этого, все простые числа имеют степень 1. Таким образом, мы можем легко вычислить все возможные состояния, используя эти целые числа, оставив
9 * 6 * 4 * 4 * 3 * 3 * 3 * 3
состояний, что составляет почти70000
. Для других целых чисел мы можем сделать dp следующим образом:dp[70000][i]
, гдеi
может быть от0
до100
. Однако, посколькуdp[i]
зависит отdp[i-1]
,dp[70000][2]
достаточно. Это оставляет сложностьn * 70000
, что возможно.
У меня следующие конкретные вопросы:
- Что подразумевается под этими состояниями?
- Означает ли
dp
динамическое программирование, и если да, то какое рекуррентное соотношение решается? - Как
dp[i]
вычисляется изdp[i-1]
? - Почему большие простые числа не влияют на количество состояний? Каждое из них встречается
0
или1
раз. Не следует ли умножать количество состояний на2
для каждого из этих простых чисел (что снова приводит к недопустимому пространству состояний)?
*Исходное описание проблемы можно найти на сайте этот источник (проблема F). Этот вопрос является упрощенной версией этого описания.