Ctrl K

Деревья из произведений

Средняя
Дан массив values различных целых чисел, каждое больше 1. Из них строят двоичные деревья по правилам: - в каждой вершине записано число из values, одно и то же число можно использовать сколько угодно раз; - у каждой вершины либо нет детей, либо ровно двое, и тогда её число равно произведению чисел детей. Деревья, отличающиеся тем, какой ребёнок левый, а какой правый, считаются разными. Сколько всего таких деревьев можно построить? Ответ может быть большим — верните его по модулю 10^9 + 7.
Пример 1
values=[3, 9, 27] → 8

Деревья из одной вершины: 3, 9, 27. Ещё 9 с детьми 3 и 3. Для 27 = 3 · 9 детей можно поставить как (3, 9) и как (9, 3), а 9 в каждом случае может быть листом или раскрыться в 3 и 3 — это ещё 4 дерева. Всего 3 + 1 + 4 = 8.

Пример 2
values=[6, 2, 7] → 3

6 = 2 · 3, но 3 в наборе нет, так что подходят только три дерева из одной вершины.

Пример 3
values=[2, 4, 8] → 8

Одиночные: 3 дерева. 4 = 2 · 2: 1 дерево. 8 = 2 · 4 или 4 · 2, причём 4 может раскрыться: 4 дерева. Итого 8.

Ограничения
  • 1 ≤ len(values) ≤ 1000
  • 2 ≤ values[i] ≤ 10⁹
  • Все числа в values различны
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСлова, спрятанные в тексте СредняяСлово растёт по букве СредняяЗаработок водителя маршрутки СредняяЛесенка квадратов СредняяНаборы без заданной разницы Средняя
загружаем Python…
Вход
values=[3, 9, 27]
Ожидается
8

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 101 тест на сервере, включая скрытые.