Mínimo dividir por 2 operaciones requeridas para hacer que GCD sea impar para una array dada

Dada una array arr[] de N enteros positivos, la tarea es encontrar el número mínimo de operaciones requeridas para hacer que el GCD del elemento de la array sea impar de modo que en cada operación un elemento de la array se pueda dividir por 2 .

Ejemplos:

Entrada: arr[] = {4, 6}
Salida: 1
Explicación:
A continuación se muestran las operaciones realizadas:
Operación 1: Dividir el elemento del arreglo arr[0](= 4) por 2 modifica el arreglo a {2, 6}.
Operación 2: dividir el elemento de array arr[0](= 2) por 2 modifica la array a {1, 6}.
Después de las operaciones anteriores, el GCD de los elementos de la array es 1, que es impar. Por lo tanto, el número mínimo de operaciones requeridas es 2.

Entrada: arr[] = {2, 4, 1}
Salida: 0

Enfoque: El problema dado se puede resolver con base en la observación al encontrar el conteo de potencias de 2 para cada elemento de array y la potencia mínima de 2 (digamos C ) dará las operaciones mínimas porque después de dividir ese elemento por 2 C el elemento se convierte en impar y eso da como resultado que el GCD de la array sea impar .

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 the minimum number
// of operations to make the GCD of
// the array odd
int minimumOperations(int arr[], int N)
{
    // Stores the minimum operations
    // required
    int mini = INT_MAX;
 
    for (int i = 0; i < N; i++) {
 
        // Stores the powers of two for
        // the current array element
        int count = 0;
 
        // Dividing by 2
        while (arr[i] % 2 == 0) {
            arr[i] = arr[i] / 2;
 
            // Increment the count
            count++;
        }
 
        // Update the minimum operation
        // required
        if (mini > count) {
            mini = count;
        }
    }
 
    // Return the result required
    return mini;
}
 
// Driver Code
int main()
{
    int arr[] = { 4, 6 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    cout << minimumOperations(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
class GFG{
 
// Function to find the minimum number
// of operations to make the GCD of
// the array odd
public static int minimumOperations(int arr[], int N)
{
   
    // Stores the minimum operations
    // required
    int mini = Integer.MAX_VALUE;
 
    for (int i = 0; i < N; i++) {
 
        // Stores the powers of two for
        // the current array element
        int count = 0;
 
        // Dividing by 2
        while (arr[i] % 2 == 0) {
            arr[i] = arr[i] / 2;
 
            // Increment the count
            count++;
        }
 
        // Update the minimum operation
        // required
        if (mini > count) {
            mini = count;
        }
    }
 
    // Return the result required
    return mini;
}
 
// Driver Code
public static void  main(String args[])
{
    int arr[] = { 4, 6 };
    int N = arr.length;
 
    System.out.println(minimumOperations(arr, N));
 
}
}
 
// This code is contributed by saurabh_jaiswal.

Python3

# python program for the above approach
INT_MAX = 2147483647
 
# Function to find the minimum number
# of operations to make the GCD of
# the array odd
def minimumOperations(arr, N):
 
    # Stores the minimum operations
    # required
    mini = INT_MAX
 
    for i in range(0, N):
 
        # Stores the powers of two for
        # the current array element
        count = 0
 
        # Dividing by 2
        while (arr[i] % 2 == 0):
            arr[i] = arr[i] // 2
 
            # Increment the count
            count += 1
 
        # Update the minimum operation
        # required
        if (mini > count):
            mini = count
 
    # Return the result required
    return mini
 
# Driver Code
if __name__ == "__main__":
 
    arr = [4, 6]
    N = len(arr)
 
    print(minimumOperations(arr, N))
 
# This code is contributed by rakeshsahni

C#

// C# program for the above approach
using System;
class GFG {
 
    // Function to find the minimum number
    // of operations to make the GCD of
    // the array odd
    public static int minimumOperations(int[] arr, int N)
    {
 
        // Stores the minimum operations
        // required
        int mini = Int32.MaxValue;
 
        for (int i = 0; i < N; i++) {
 
            // Stores the powers of two for
            // the current array element
            int count = 0;
 
            // Dividing by 2
            while (arr[i] % 2 == 0) {
                arr[i] = arr[i] / 2;
 
                // Increment the count
                count++;
            }
 
            // Update the minimum operation
            // required
            if (mini > count) {
                mini = count;
            }
        }
 
        // Return the result required
        return mini;
    }
 
    // Driver Code
    public static void Main(string[] args)
    {
        int[] arr = { 4, 6 };
        int N = arr.Length;
 
        Console.WriteLine(minimumOperations(arr, N));
    }
}
 
// This code is contributed by ukasp.

Javascript

<script>
// Javascript program for the above approach
 
// Function to find the minimum number
// of operations to make the GCD of
// the array odd
function minimumOperations(arr, N)
{
 
  // Stores the minimum operations
  // required
  let mini = Number.MAX_SAFE_INTEGER;
 
  for (let i = 0; i < N; i++)
  {
   
    // Stores the powers of two for
    // the current array element
    let count = 0;
 
    // Dividing by 2
    while (arr[i] % 2 == 0) {
      arr[i] = Math.floor(arr[i] / 2);
 
      // Increment the count
      count++;
    }
 
    // Update the minimum operation
    // required
    if (mini > count) {
      mini = count;
    }
  }
 
  // Return the result required
  return mini;
}
 
// Driver Code
 
let arr = [4, 6];
let N = arr.length;
 
document.write(minimumOperations(arr, N));
 
// This code is contributed by saurabh_jaiswal.
</script>
Producción: 

1

 

Complejidad de tiempo: O(N*log N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por bunny09262002 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *