Минимизируйте свопы, необходимые для того, чтобы сделать все элементы с простым индексом основными.

Опубликовано: 21 Сентября, 2022

Дан массив arr[] размера N. Задача состоит в том, чтобы найти минимальное количество свопов, необходимых для переупорядочивания массива таким образом, чтобы все элементы с простым индексом были простыми . Если задача не может быть достигнута, выведите « -1 ». “

Примеры:

Input:  N = 5, arr[] = {1, 2, 3, 4, 5}
Output: 0
Explanation: All the prime indices {2, 3, 5} (one-based indexing) have prime elements present on them. Therefore, minimum swaps required is 0.

Input:  N = 5, arr[] = {2, 7, 8, 5, 13}
Output: 1
Explanation: swap 8 and 5 once, to get all the prime numbers at prime indices.

Подход: Задачу можно решить с помощью Решета Эратосфена.

  • Переберите массив и проверьте, является ли текущий индекс простым или нет, если он является простым, проверьте элемент, присутствующий в этом индексе.
  • При наблюдении видно, что добиться требуемой конфигурации можно только в том случае, если общее количество простых чисел в массиве больше или равно общему количеству простых индексов в массиве.
  • Если это условие выполнено, то минимальное количество перестановок равно количеству простых индексов, на которых нет простого числа.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность : O(mxn(log(log(mxn)))
Вспомогательное пространство : O(mxn)