Diferencia mínima absoluta entre N y una potencia de 2

Dado un número entero N , la tarea es encontrar la mínima diferencia absoluta entre N y una potencia de 2 .
Ejemplos: 
 

Entrada: N = 4 
Salida:
La potencia de 2 más cercana a 4 es 4. Por lo tanto, la diferencia mínima posible es 0.
Entrada: N = 9 
Salida:
La potencia de 2 más cercana a 9 es 8 y 9 – 8 = 1 
 

Enfoque: encuentre la potencia de 2 más cercana a N a su izquierda, izquierda = 2 piso (log2 (N)) , luego la potencia de 2 más cercana a la derecha de N será izquierda * 2 . Ahora la mínima diferencia absoluta será el mínimo de N – izquierda y derecha – N .
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the minimum difference
// between N and a power of 2
int minAbsDiff(int n)
{
    // Power of 2 closest to n on its left
    int left = pow(2, floor(log2(n)));
 
    // Power of 2 closest to n on its right
    int right = left * 2;
 
    // Return the minimum abs difference
    return min((n - left), (right - n));
}
 
// Driver code
int main()
{
    int n = 15;
    cout << minAbsDiff(n);
    return 0;
}

Java

// Java implementation of the above approach
import java.util.*;
 
class GFG
{
 
// Function to return the minimum difference
// between N and a power of 2
static int minAbsDiff(int n)
{
    // Power of 2 closest to n on its left
    int left = (int)Math.pow(2, (int)(Math.log(n) /
                                Math.log(2)));
 
    // Power of 2 closest to n on its right
    int right = left * 2;
 
    // Return the minimum abs difference
    return Math.min((n - left), (right - n));
}
 
// Driver code
public static void main(String args[])
{
    int n = 15;
    System.out.println(minAbsDiff(n));
}
}
 
// This code is contributed by
// Surendra_Gangwar

Python3

# Python3 implementation of the
# above approach
 
# from math lib import floor
# and log2 function
from math import floor, log2
 
# Function to return the minimum
# difference between N and a power of 2
def minAbsDiff(n) :
     
    # Power of 2 closest to n on its left
    left = pow(2, floor(log2(n)))
 
    # Power of 2 closest to n on its right
    right = left * 2
 
    # Return the minimum abs difference
    return min((n - left), (right - n))
 
# Driver code
if __name__ == "__main__" :
 
    n = 15
    print(minAbsDiff(n))
 
# This code is contributed by Ryuga

C#

// C# implementation of the above approach
using System;
 
class GFG
{
// Function to return the minimum difference
// between N and a power of 2
static double minAbsDiff(double n)
{
    // Power of 2 closest to n on its left
    double left = Math.Pow(2,
                Math.Floor(Math.Log(n, 2)));
 
    // Power of 2 closest to n on its right
    double right = left * 2;
 
    // Return the minimum abs difference
    return Math.Min((n - left), (right - n));
}
 
// Driver code
public static void Main()
{
    double n = 15;
    Console.Write(minAbsDiff(n));
}
}
 
// This code is contributed by
// Akanksha Rai

PHP

<?php
// PHP implementation of the above approach
 
// Function to return the minimum difference
// between N and a power of 2
function minAbsDiff($n)
{
    // Power of 2 closest to n on its left
    $left = pow(2, floor(log($n, 2)));
 
    // Power of 2 closest to n on its right
    $right = $left * 2;
 
    // Return the minimum abs difference
    return min(($n - $left), ($right - $n));
}
 
// Driver code
$n = 15;
echo minAbsDiff($n);
 
// This code is contributed
// by Akanksha Rai

Javascript

<script>
 
    // Javascript implementation of the above approach
     
    // Function to return the minimum difference
    // between N and a power of 2
    function minAbsDiff(n)
    {
        // Power of 2 closest to n on its left
        let left = Math.pow(2, Math.floor(Math.log2(n, 2)));
 
        // Power of 2 closest to n on its right
        let right = left * 2;
 
        // Return the minimum abs difference
        return Math.min((n - left), (right - n));
    }
     
    let n = 15;
    document.write(minAbsDiff(n));
     
</script>
Producción: 

1

 

Complejidad de tiempo: O(1)

Espacio Auxiliar: O(1)

Podemos usar el operador de desplazamiento a la izquierda para optimizar la implementación. 
 

C++

// C++ implementation of the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the minimum difference
// between N and a power of 2
int minAbsDiff(int n)
{
    // Power of 2 closest to n on its left
    int left = 1 << ((int)floor(log2(n)));
 
    // Power of 2 closest to n on its right
    int right = left * 2;
 
    // Return the minimum abs difference
    return min((n - left), (right - n));
}
 
// Driver code
int main()
{
    int n = 15;
    cout << minAbsDiff(n);
    return 0;
}

Java

// Java implementation of the above approach
class GFG
{
     
// Function to return the minimum difference
// between N and a power of 2
static int minAbsDiff(int n)
{
    // Power of 2 closest to n on its left
    int left = 1 << ((int)Math.floor(Math.log(n) / Math.log(2)));
 
    // Power of 2 closest to n on its right
    int right = left * 2;
 
    // Return the minimum abs difference
    return Math.min((n - left), (right - n));
}
 
// Driver code
public static void main (String[] args)
{
    int n = 15;
    System.out.println(minAbsDiff(n));
}
}
 
// This code is contributed by chandan_jnu

Python3

# Python3 implementation of the
# above approach
import math
 
# Function to return the minimum
# difference between N and a power of 2
def minAbsDiff(n):
     
    # Power of 2 closest to n on its left
    left = 1 << (int)(math.floor(math.log2(n)))
 
    # Power of 2 closest to n on its right
    right = left * 2
 
    # Return the minimum abs difference
    return min((n - left), (right - n))
 
# Driver code
if __name__ == "__main__":
    n = 15
    print(minAbsDiff(n))
 
# This code is contributed
# by 29AjayKumar

C#

// C# implementation of the above approach
using System;
 
public class GFG
{
 
// Function to return the minimum difference
// between N and a power of 2
static int minAbsDiff(int n)
{
    // Power of 2 closest to n on its left
    int left = 1 << ((int)Math.Floor(Math.Log(n) / Math.Log(2)));
 
    // Power of 2 closest to n on its right
    int right = left * 2;
 
    // Return the minimum abs difference
    return Math.Min((n - left), (right - n));
}
 
// Driver code
static public void Main ()
{
    int n = 15;
    Console.WriteLine(minAbsDiff(n));
}
}
 
// This code is contributed by jit_t.

PHP

<?php
// PHP implementation of the above approach
 
// Function to return the minimum difference
// between N and a power of 2
function minAbsDiff($n)
{
    // Power of 2 closest to n on its left
    $left = 1 << ((floor(log($n) / log(2))));
 
    // Power of 2 closest to n on its right
    $right = $left * 2;
 
    // Return the minimum abs difference
    return min(($n - $left), ($right - $n));
}
 
// Driver code
$n = 15;
echo minAbsDiff($n);
 
// This code is contributed by ita_c
?>

Javascript

<script>
    // Javascript implementation of the above approach
     
    // Function to return the minimum difference
    // between N and a power of 2
    function minAbsDiff(n)
    {
        // Power of 2 closest to n on its left
        let left = 1 << (Math.floor(Math.log(n) / Math.log(2)));
 
        // Power of 2 closest to n on its right
        let right = left * 2;
 
        // Return the minimum abs difference
        return Math.min((n - left), (right - n));
    }
     
    let n = 15;
    document.write(minAbsDiff(n));
 
</script>
Producción: 

1

 

Complejidad del tiempo : O(1)

Espacio Auxiliar: O(1)
 

Publicación traducida automáticamente

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