Dada una array arr[] que consta de N enteros positivos, la tarea es encontrar la longitud mínima posible de una barra que se puede cortar en N partes iguales de modo que cada i -ésima parte se pueda cortar en arr[i] partes iguales.
Ejemplos:
Entrada: arr[] ={1, 2}
Salida: 4
Explicación:
Considere la longitud de la barra como 4. Luego se puede dividir en 2 partes iguales, cada una con una longitud de 2.
Ahora, la parte 1 se puede dividir en arr[ 0](= 1) partes iguales de longitud 2.
La parte 2 se puede dividir en arr[1](= 2) partes iguales de longitud 1.
Por tanto, la longitud mínima de la varilla debe ser 4.Entrada: arr[]= {1, 1}
Salida: 2
Enfoque ingenuo: el problema dado se puede resolver en función de las siguientes observaciones:
- Considere que la longitud mínima de la barra es X , luego esta barra se corta en N partes iguales y la longitud de cada parte será X/N .
- Ahora, cada N partes se reducirá nuevamente de la siguiente manera:
- La parte 1 se cortará en arr[0] iguales donde cada parte tiene una longitud, digamos 1 .
- La parte 2 se cortará en arr[1] iguales donde cada parte tiene una longitud, digamos 2 .
- La parte 3 se cortará en arr[2] iguales donde cada parte tiene una longitud, por ejemplo, 3 .
- .
- .
- .
- y así.
- Ahora, la relación anterior también se puede escribir como:
X/N = arr[0]*a 1 = arr[1]*a 2 = … = arr[N – 1]*a N .
- Por lo tanto, la longitud mínima de la barra viene dada por:
N*lcm (arr[0]*a 1 , arr[1]*a 2 , …, arr[N – 1]*a N )
A partir de las observaciones anteriores, imprima el valor del producto de N y el LCM del arreglo dado arr[] como la longitud mínima resultante de la barra.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program for the above approach #include <bits/stdc++.h> using namespace std; // Function to find GCD // of two numbers a and b int gcd(int a, int b) { // Base Case if (b == 0) return a; // Find GCD recursively return gcd(b, a % b); } // Function to find the LCM // of the resultant array int findlcm(int arr[], int n) { // Initialize a variable ans // as the first element int ans = arr[0]; // Traverse the array for (int i = 1; i < n; i++) { // Update LCM ans = (((arr[i] * ans)) / (gcd(arr[i], ans))); } // Return the minimum // length of the rod return ans; } // Function to find the minimum length // of the rod that can be divided into // N equals parts and each part can be // further divided into arr[i] equal parts void minimumRod(int A[], int N) { // Print the result cout << N * findlcm(A, N); } // Driver Code int main() { int arr[] = { 1, 2 }; int N = sizeof(arr) / sizeof(arr[0]); minimumRod(arr, N); return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; public class GFG { // Function to find GCD // of two numbers a and b static int gcd(int a, int b) { // Base Case if (b == 0) return a; // Find GCD recursively return gcd(b, a % b); } // Function to find the LCM // of the resultant array static int findlcm(int arr[], int n) { // Initialize a variable ans // as the first element int ans = arr[0]; // Traverse the array for (int i = 1; i < n; i++) { // Update LCM ans = (((arr[i] * ans)) / (gcd(arr[i], ans))); } // Return the minimum // length of the rod return ans; } // Function to find the minimum length // of the rod that can be divided into // N equals parts and each part can be // further divided into arr[i] equal parts static void minimumRod(int A[], int N) { // Print the result System.out.println(N * findlcm(A, N)); } // Driver Code public static void main(String[] args) { int arr[] = { 1, 2 }; int N = arr.length; minimumRod(arr, N); } } // This code is contributed by Kingash.
Python3
# Python3 program for the above approach # Function to find GCD # of two numbers a and b def gcd(a, b): # Base Case if (b == 0): return a # Find GCD recursively return gcd(b, a % b) # Function to find the LCM # of the resultant array def findlcm(arr, n): # Initialize a variable ans # as the first element ans = arr[0] # Traverse the array for i in range(n): # Update LCM ans = (((arr[i] * ans)) / (gcd(arr[i], ans))) # Return the minimum # length of the rod return ans # Function to find the minimum length # of the rod that can be divided into # N equals parts and each part can be # further divided into arr[i] equal parts def minimumRod(A, N): # Print the result print(int(N * findlcm(A, N))) # Driver Code arr = [ 1, 2 ] N = len(arr) minimumRod(arr, N) # This code is contributed by sanjoy_62
C#
// C# program for the above approach using System; class GFG { // Function to find GCD // of two numbers a and b static int gcd(int a, int b) { // Base Case if (b == 0) return a; // Find GCD recursively return gcd(b, a % b); } // Function to find the LCM // of the resultant array static int findlcm(int[] arr, int n) { // Initialize a variable ans // as the first element int ans = arr[0]; // Traverse the array for (int i = 1; i < n; i++) { // Update LCM ans = (((arr[i] * ans)) / (gcd(arr[i], ans))); } // Return the minimum // length of the rod return ans; } // Function to find the minimum length // of the rod that can be divided into // N equals parts and each part can be // further divided into arr[i] equal parts static void minimumRod(int[] A, int N) { // Print the result Console.WriteLine(N * findlcm(A, N)); } // Driver code static void Main() { int[] arr = { 1, 2 }; int N = arr.Length; minimumRod(arr, N); } } // This code is contributed by sk944795.
Javascript
<script> // javascript program for the above approach // Function to find GCD // of two numbers a and b function gcd(a, b) { // Base Case if (b == 0) return a; // Find GCD recursively return gcd(b, a % b); } // Function to find the LCM // of the resultant array function findlcm(arr, n) { // Initialize a variable ans // as the first element let ans = arr[0]; // Traverse the array for (let i = 1; i < n; i++) { // Update LCM ans = (((arr[i] * ans)) / (gcd(arr[i], ans))); } // Return the minimum // length of the rod return ans; } // Function to find the minimum length // of the rod that can be divided into // N equals parts and each part can be // further divided into arr[i] equal parts function minimumRod(A, N) { // Print the result document.write(N * findlcm(A, N)); } // Driver Code let arr = [ 1, 2 ]; let N = arr.length; minimumRod(arr, N); </script>
4
Complejidad de tiempo: O(N*log M) donde M es el elemento máximo de la array .
Espacio Auxiliar: O(N)
Publicación traducida automáticamente
Artículo escrito por grand_master y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA