Ctrl K

Различные НОД наборов

Сложная
Дан массив положительных целых чисел values. Выберем из него любой непустой набор элементов (элементы берутся по позициям, порядок не важен) и посчитаем наибольший общий делитель (НОД) выбранных чисел. НОД одного числа — само это число. Сколько различных значений НОД можно получить, перебрав все непустые наборы? Наборов экспоненциально много, так что перебирать их не стоит.
Пример 1
values=[12, 18, 8] → 6

Одиночные элементы дают 12, 18 и 8; пары — НОД(12, 18) = 6, НОД(12, 8) = 4, НОД(18, 8) = 2; все три — 2. Различных значений шесть: 12, 18, 8, 6, 4, 2.

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

Любой набор, в котором есть семёрка, даёт 7, а одна 14 даёт 14. Всего два значения.

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

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