Problema
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
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⁶.
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.