Dada una array arr[] de tamaño N . La tarea es reordenar arr[] y encontrar el número máximo de pares de GCD que cumpla con las condiciones que se indican a continuación.
- Elija dos elementos cualquiera de la array Ai y Aj de la array donde 0 <= i < j < N.
- Calcular MCD después de multiplicar Aj con 2 como (Ai, 2 * Aj) que es mayor que 1.
Ejemplos
Entrada: arr[] = { 3, 6 . 5, 3}
Salida: 4
Explicación: Reordene la array de esta manera: { 6, 5, 3, 3 } y debajo están los pares formados a partir de arr[].
P1 = MCD( 6, 5 * 2) => (6, 10) => 2 > 1
P2 = MCD( 6, 3 * 2) => (6, 6) => 6 > 1
P3 = MCD( 6, 3 * 2) => (6, 6) => 6 > 1
P4 = MCD (3, 3 * 2) => (3, 6) => 3 > 1Entrada: arr[] = { 1, 7 }
Salida: 0
Explicación: Si la array tiene un orden como { 7, 1 } no se puede formar ningún par
MCD(7, 1 * 2) = > (7, 2 ), MCD(1 , 7 * 2) => (1, 14) == 1
Planteamiento: Si observamos que si los elementos pares están en posición inicial entonces el par de (MCD > 1) es máximo porque hay una condición para multiplicar el arr[j] * 2 , y el orden de los elementos impares no importa su número de par siempre igual. Siga los pasos a continuación para resolver el problema dado.
- Inicialice la variable idx con valor 0 .
- Atraviesa la array.
- Si arr[i] es par, intercambie con arr[idx] e incremente idx en 1 .
- Después de recorrer todos los elementos.
- Inicialice la variable ans con 0 .
- Use dos bucles primero con i y segundo con j = i + 1 .
- Ahora si gcd(arr[i], 2 * arr[j] * 2) > 1 incrementa el ans en 1 .
A continuación se muestra la implementación del enfoque anterior.
C++
// C++ program for above approach #include <bits/stdc++.h> using namespace std; // Function to find the maximum number of pairs int maximumpairs(int arr[], int n) { // Reorder array with even element first int idx = 0; for (int i = 0; i < n; i++) { if (arr[i] % 2 == 0) { swap(arr[i], arr[idx]); idx++; } } // Now count the ans int ans = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { if (__gcd(arr[i], 2 * arr[j]) > 1) { ans++; } } } return ans; } // Driver Code int main() { // Initializations int arr[] = { 5, 3, 6, 3 }; int N = sizeof(arr) / sizeof(int); // Function Call int ans = maximumpairs(arr, N); cout << ans; return 0; }
Java
// Java program for the above approach import java.io.*; import java.lang.*; import java.util.*; class GFG { // find gcd static int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } // Function to find the maximum number of pairs static int maximumpairs(int arr[], int n) { // Reorder array with even element first int idx = 0; for (int i = 0; i < n; i++) { if (arr[i] % 2 == 0) { //swap int temp = arr[i]; arr[i] = arr[idx]; arr[idx] = temp; idx++; } } // Now count the ans int ans = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { int a = arr[i]; int b = 2 * arr[j]; if (gcd(a, b) > 1) { ans++; } } } return ans; } public static void main (String[] args) { // Initializations int arr[] = { 5, 3, 6, 3 }; int N = arr.length; // Function Call int ans = maximumpairs(arr, N); System.out.println(ans); } } // This code is contributed by hrithikgarg03188
Python3
# Python program for above approach # Function to find GCD def gcd(a, b): if(b == 0): return a else: return gcd(b, a % b) # Function to find the maximum number of pairs def maximumpairs(arr,n): # Reorder array with even element first idx = 0 for i in range(0, n): if (arr[i] % 2 == 0): arr[i], arr[idx] = arr[idx], arr[i] idx = idx + 1 # Now count the ans ans = 0 for i in range(0,n): for j in range(i + 1,n): if (gcd(arr[i], 2*arr[j]) > 1): ans = ans + 1 return ans # Driver Code # Initializations arr = [ 5, 3, 6, 3 ] N = len(arr) # Function Call ans = maximumpairs(arr, N) print(ans) # This code is contributed by Taranpreet
C#
// C# program for the above approach using System; class GFG { // find gcd static int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } // Function to find the maximum number of pairs static int maximumpairs(int []arr, int n) { // Reorder array with even element first int idx = 0; for (int i = 0; i < n; i++) { if (arr[i] % 2 == 0) { //swap int temp = arr[i]; arr[i] = arr[idx]; arr[idx] = temp; idx++; } } // Now count the ans int ans = 0; for (int i = 0; i < n; i++) { for (int j = i + 1; j < n; j++) { int a = arr[i]; int b = 2 * arr[j]; if (gcd(a, b) > 1) { ans++; } } } return ans; } public static void Main () { // Initializations int []arr = { 5, 3, 6, 3 }; int N = arr.Length; // Function Call int ans = maximumpairs(arr, N); Console.Write(ans); } } // This code is contributed by Samim Hossain Mondal.
Javascript
<script> // Javascript program for the above approach // find gcd function gcd(a, b) { if (b == 0) return a; return gcd(b, a % b); } // Function to find the maximum number of pairs function maximumpairs(arr, n) { // Reorder array with even element first let idx = 0; for (let i = 0; i < n; i++) { if (arr[i] % 2 == 0) { //swap let temp = arr[i]; arr[i] = arr[idx]; arr[idx] = temp; idx++; } } // Now count the ans let ans = 0; for (let i = 0; i < n; i++) { for (let j = i + 1; j < n; j++) { let a = arr[i]; let b = 2 * arr[j]; if (gcd(a, b) > 1) { ans++; } } } return ans; } // Initializations let arr = [ 5, 3, 6, 3 ]; let N = arr.length; // Function Call let ans = maximumpairs(arr, N); document.write(ans); // This code is contributed by Samim Hossain Mondal. </script>
4
Complejidad de Tiempo: O(N * N * logN)
Espacio Auxiliar: O(1)
Publicación traducida automáticamente
Artículo escrito por hrithikgarg03188 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA