Fácil 0 resueltos 0% de aceptación

Potencia de dos

Verifica si un número es una potencia de dos.

Lo que aprenderás

  • Comprobar potencias de dos dividiendo a la mitad
  • Usar el truco de bits n & (n - 1)
  • Manejar el cero y los negativos

Problema

Ver original (inglés)

Decide si n es igual a 2ᵏ para algún número entero k ≥ 0 (1, 2, 4, 8, …).

Implementa is_power_of_two(n).

Entrada

n: El número a verificar.

Salida

Devuelve true si n es una potencia de dos.

Restricciones

-10¹⁸ ≤ n ≤ 10¹⁸

Ejemplos

Ejemplo 1
Entrada:
n = 64

Salida esperada:
expected = True
Entrada:
long long n = 64;

Salida esperada:
bool expected = true;
Entrada:
long n = 64;

Salida esperada:
bool expected = true;

Explicación

64 = 2⁶.

Ejemplo 2
Entrada:
n = 12

Salida esperada:
expected = False
Entrada:
long long n = 12;

Salida esperada:
bool expected = false;
Entrada:
long n = 12;

Salida esperada:
bool expected = false;

Explicación

12 = 4 × 3 tiene un factor impar, así que no es una potencia de dos.

Cómo abordarlo

Inténtalo primero por tu cuenta y luego abre las pistas una a una.

Pista 1

Una potencia de dos tiene exactamente un bit encendido en binario.

Pista 2

Comprueba que el número sea positivo antes de usar una prueba basada en bits.

Pista 3

Los números negativos y el cero nunca son potencias de dos.

Complejidad esperada

tiempo O(1), espacio extra O(1)

Referencias

Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.