Ctrl K

Первый взаимно простой разрез

Сложная
Дан массив натуральных чисел values длины n. Разрез после индекса i (где 0 ≤ i ≤ n - 2) делит массив на две непустые части: элементы с индексами 0..i и все остальные. Разрез называется чистым, если произведение левой части и произведение правой части взаимно просты, то есть их наибольший общий делитель равен 1. Верните наименьший индекс i, после которого разрез чистый, или -1, если чистого разреза нет. Произведения могут быть огромными — перемножать числа напрямую не стоит.
Пример 1
values=[6, 10, 7, 21, 11] → 3

После индекса 0 мешает общий делитель 2 (6 и 10), после индекса 1 — делитель 3 (60 и 21), после индекса 2 — делители 3 и 7. После индекса 3 слева 6·10·7·21 = 8820, справа 11 — общих делителей нет, ответ 3.

Пример 2
values=[4, 9, 2, 3] → -1

Левая часть всегда содержит 4 (делитель 2), а пока справа есть 2 — разрез плохой; после индекса 2 справа остаётся 3, а слева 9 — тоже общий делитель 3. Хорошего разреза нет.

Пример 3
values=[1, 1] → 0

1 и 1 взаимно просты, поэтому подходит уже разрез после индекса 0.

Ограничения
  • 1 ≤ n ≤ 10⁴
  • 1 ≤ values[i] ≤ 10⁶
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамая большая группа с общими делителями СложнаяНОД пар по номеру в сортировке СложнаяГруппы по малому НОК СложнаяРовные стопки карт ЛёгкаяРамки одной формы Средняя
загружаем Python…
Вход
values=[6, 10, 7, 21, 11]
Ожидается
3

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