Esto es un interview question: "Dado 2 enteros xey, verifique si x es una potencia entera de y" (por ejemplo, para x = 8 yy = 2 la respuesta es " verdadero ", y para x = 10 ey = 2" falso ").Compruebe si un entero es una potencia entera de otro
La solución obvia es:
int n = y; while(n < x) n *= y; return n == x
Ahora estoy pensando en cómo mejorarlo.
Por supuesto, puedo verificar algunos casos especiales: p. ambos x
y y
deben ser números pares o impares, es decir, podemos verificar el bit menos significativo de x
y y
. Sin embargo, me pregunto si puedo mejorar el algoritmo central en sí mismo.
En realidad, pensé que la solución obvia es dividir x por y luego dividir el resultado por y continuamente hasta que llegue a un número que no sea divisible por y. Si ese número es 1, x es un poder de y. – JeremyP
Desafortunado que ni un solo usuario aquí notó que cada pieza del código publicado falla miserablemente para x = ± 1 – Nabb
No, la mía funciona para x = +1 (y un ABS trivial corrige los números negativos). Ahora y == 0, sin embargo. –