Mayor factor impar de un número par

Dado un número par N , la tarea es encontrar el mayor factor impar posible de N .

Ejemplos: 

Entrada: N = 8642 
Salida: 4321 
Explicación: 
Aquí, los factores de 8642 son {1, 8642, 2, 4321, 29, 298, 58, 149} en los que los factores impares son {1, 4321, 29, 149} y el mayor factor impar entre todos los factores impares es 4321.

Entrada: N = 100 
Salida: 25 
Explicación: 
Aquí, los factores de 100 son {1, 100, 2, 50, 4, 25, 5, 20, 10} en los que los factores impares son {1, 25, 5} y el mayor factor impar entre todos los factores impares es 25. 
 

Enfoque ingenuo: el enfoque ingenuo es encontrar todos los factores de N y luego seleccionar el factor impar más grande de él. 
Complejidad del tiempo: O(sqrt(N))

Enfoque eficiente: El enfoque eficiente para este problema es observar que todo número par N se puede representar como:  

N = 2i*odd_number

Por lo tanto, para obtener el número impar más grande, debemos dividir el número dado N por 2 hasta que N se convierta en un número 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 print greatest odd factor
int greatestOddFactor(int n)
{
    int pow_2 = (int)(log(n));
     
    // Initialize i with 1
    int i = 1;
     
    // Iterate till i <= pow_2
    while (i <= pow_2)
    {
         
        // Find the pow(2, i)
        int fac_2 = (2 * i);
        if (n % fac_2 == 0)
        {
            // If factor is odd, then
            // print the number and break
            if ((n / fac_2) % 2 == 1)
            {
                return (n / fac_2);
            }
        }
 
        i += 1;
    }
}
 
// Driver Code
int main()
{
     
    // Given Number
    int N = 8642;
     
    // Function Call
    cout << greatestOddFactor(N);
    return 0;
}
 
// This code is contributed by Amit Katiyar

Java

// Java program for the above approach
class GFG{
     
// Function to print greatest odd factor
public static int greatestOddFactor(int n)
{
    int pow_2 = (int)(Math.log(n));
     
    // Initialize i with 1
    int i = 1;
     
    // Iterate till i <= pow_2
    while (i <= pow_2)
    {
         
        // Find the pow(2, i)
        int fac_2 = (2 * i);
        if (n % fac_2 == 0)
        {
             
            // If factor is odd, then
            // print the number and break
            if ((n / fac_2) % 2 == 1)
            {
                return (n / fac_2);
            }
        }
        i += 1;
    }
    return 0;
}
 
// Driver code
public static void main(String[] args)
{
     
    // Given Number
    int N = 8642;
     
    // Function Call
    System.out.println(greatestOddFactor(N));
}
}
 
// This code is contributed by divyeshrabadiya07

Python3

# Python3 program for the above approach
 
# importing Maths library
import math
 
# Function to print greatest odd factor
def greatestOddFactor(n):
   
  pow_2 = int(math.log(n, 2))
   
# Initialize i with 1
  i = 1
 
# Iterate till i <= pow_2
  while i <= pow_2:
 
# find the pow(2, i)
    fac_2 = (2**i)
 
    if (n % fac_2 == 0) :
 
      # If factor is odd, then print the
      # number and break
      if ( (n // fac_2) % 2 == 1):
        print(n // fac_2)
        break
 
    i += 1
 
# Driver Code
 
# Given Number
N = 8642
 
# Function Call
greatestOddFactor(N)

C#

// C# program for the above approach
using System;
 
class GFG{
     
// Function to print greatest odd factor
public static int greatestOddFactor(int n)
{
    int pow_2 = (int)(Math.Log(n));
     
    // Initialize i with 1
    int i = 1;
     
    // Iterate till i <= pow_2
    while (i <= pow_2)
    {
         
        // Find the pow(2, i)
        int fac_2 = (2 * i);
        if (n % fac_2 == 0)
        {
             
            // If factor is odd, then
            // print the number and break
            if ((n / fac_2) % 2 == 1)
            {
                return (n / fac_2);
            }
        }
        i += 1;
    }
    return 0;
}
 
// Driver code
public static void Main(String[] args)
{
     
    // Given number
    int N = 8642;
     
    // Function call
    Console.WriteLine(greatestOddFactor(N));
}
}
 
// This code is contributed by gauravrajput1

Javascript

<script>
 
// JavaScript program for the above approach
 
// Function to print greatest odd factor
function greatestOddFactor(n)
{
    let pow_2 = (Math.log(n));
       
    // Initialize i with 1
    let i = 1;
       
    // Iterate till i <= pow_2
    while (i <= pow_2)
    {
           
        // Find the pow(2, i)
        let fac_2 = (2 * i);
        if (n % fac_2 == 0)
        {
               
            // If factor is odd, then
            // print the number and break
            if ((n / fac_2) % 2 == 1)
            {
                return (n / fac_2);
            }
        }
        i += 1;
    }
    return 0;
}
   
 
// Driver Code
 
    // Given Number
    let N = 8642;
       
    // Function Call
    document.write(greatestOddFactor(N)); ;
         
</script>
Producción: 

4321

 

Complejidad del tiempo: O(log2(N))
 

Publicación traducida automáticamente

Artículo escrito por deepanshu_rustagi 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 *