Necesito una manera simple de encontrar si la variable originalnumber es una potencia de dos. Prefiero evitar el uso de funciones, especialmente porque estoy increíblemente confundido por los parámetros, por lo que algo como la división sería útil

Esto está en Python 3.

Sería útil algo similar a cómo se encuentra si un número es divisible por otro número.

Al principio tenía (solo un ejemplo de lo que estoy buscando):

if originalnumber % 2 == 0:
     print("is power of 2")
else:
     print("is not power of 2")
-1
imtired 7 oct. 2019 a las 14:59

3 respuestas

La mejor respuesta

Lo haría a través de la función math.log, que forma parte del paquete matemático.

import math
base = 2
number = 8
print(math.log(number,base))

Output: 3

A continuación, puede verificar si esta salida es un número entero o flotante, y continuar desde allí.

0
Corsaka 7 oct. 2019 a las 12:05

Hay una manera fácil, pero necesitarás usar una función matemática:

import math
2 ** int(math.log(n, 2)) == n

Aquí estamos comprobando si el número n es una potencia de dos mediante el uso de identidades logarítmicas simples.

Para explicarlo en palabras: si 2 a la potencia del logaritmo de base 2 de n, es igual a n, es porque n es una potencia de 2.

1
Óscar López 7 oct. 2019 a las 12:36

¿Podría convertir el número a una cadena binaria y verificar que todos menos el primer dígito son "0"?

def is_power_of_two(n):
    return "{:b}".format(n)[1:].replace("0", "")  == ""

Para entender exactamente cómo funciona esto, tenía que:

  • saber el sistema de números binarios
  • lea sobre cómo declarar y usar funciones.
  • leer sobre el formato de cadena ()
  • Lea sobre las funciones de cadena (replace ())
1
gelonida 7 oct. 2019 a las 14:00
58269148