Минимальная длина стержня, который может быть разделен на N равных частей, которые в дальнейшем могут быть разделены на заданное количество равных частей
Дан массив arr[] , состоящий из N положительных целых чисел. Задача состоит в том, чтобы найти минимально возможную длину стержня, который можно разрезать на N равных частей так, чтобы каждую i -ю часть можно было разрезать на arr[i] равных частей.
Примеры:
Input: arr[] = {1, 2}
Output: 4
Explanation:
Consider the length of the rod as 4. Then it can be divided in 2 equal parts, each having length 2.
Now, part 1 can be divided in arr[0](= 1) equal parts of length 2.
Part 2 can be divided in arr[1](= 2) equal parts of length 1.
Therefore, the minimum length of the rod must be 4.Input: arr[] = {1, 1}
Output: 2
Наивный подход: Данная проблема может быть решена на основе следующих наблюдений:
- Предположим, что минимальная длина стержня равна X , тогда этот стержень разрезается на N равных частей и длина каждой части будет X/N .
- Теперь каждые N частей снова будут урезаны следующим образом:
- Часть 1 будет разрезана на arr[0] equal, где каждая часть имеет длину, скажем, a 1 .
- Часть 2 будет разрезана на arr[1] equal, где каждая часть имеет длину, скажем, a 2 .
- Часть 3 будет разрезана на arr[2] equal, где каждая часть имеет длину, скажем, a 3 .
- .
- .
- .
- и так далее.
- Теперь приведенное выше соотношение можно также записать в виде:
X/N = arr[0]*a1 = arr[1]*a2 = … = arr[N – 1]*aN.
- Следовательно, минимальная длина стержня определяется по формуле:
N*lcm (arr[0]*a1, arr[1]*a2, …, arr[N – 1]*aN)
Из приведенных выше наблюдений выведите значение произведения N и НОК данного массива arr[] как результирующую минимальную длину стержня.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(N*log M), где M — максимальный элемент массива .
Вспомогательное пространство: O(N)