Ctrl K

Разрез по общим краям

Средняя
Дан массив целых положительных чисел values. Разрежьте его на непрерывные непустые куски так, чтобы каждый элемент попал ровно в один кусок, а у первого и последнего числа каждого куска был общий делитель больше 1. Если кусок состоит из одного числа, оно считается и первым, и последним. Что стоит внутри куска, неважно — проверяются только его края. Верните наименьшее число кусков. Если так разрезать массив нельзя, верните -1.
Пример 1
values=[6, 5, 9, 10, 25] → 2

Кусок [6, 5, 9] начинается с 6 и кончается 9, у них общий делитель 3. У куска [10, 25] общий делитель 5. Одним куском нельзя: у 6 и 25 нет общего делителя больше 1.

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

Можно взять [4, 9, 2] (концы 4 и 2, НОД 2) и [3]. Одним куском нельзя: у 4 и 3 нет общего делителя больше 1.

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

Единицу нельзя поставить ни в какой кусок: её НОД с любым числом равен 1. Ответ -1.

Ограничения
  • 1 ≤ len(values) ≤ 1000
  • 1 ≤ values[i] ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиКуски с общим делителем СредняяПодтянуть числа под делители СложнаяПростые числа до границы СредняяN-е число из заданных простых СредняяЦепочка кратных Средняя
загружаем Python…
Вход
values=[6, 5, 9, 10, 25]
Ожидается
2

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