El primer paso del algoritmo de prueba de primalidad AKS es verificar si el número de entrada es una potencia perfecta. Parece que este es un hecho bien conocido en la teoría de números ya que el documento no lo explicó en detalle. ¿Alguien puede decirme cómo hacer esto en tiempo polinómico? Gracias.
23
Respuestas:
Dado un número n, si se puede escribir como (b> 1), entonces b < log ( n ) + 1 . Y para cada b fija , se puede verificar si existe una a con a b = n mediante la búsqueda binaria. El tiempo total de ejecución es, por lo tanto, O ( log 2 n ) , supongo.unasi b < log( n ) + 1 si una unasi= n O ( log2n )
fuente
Ver Bach y Sorenson, algoritmos Sieve para pruebas de potencia perfecta, Algorithmica 9 (1993), 313-328, DOI: 10.1007 / BF01228507, y DJ Bernstein, Detección de potencias perfectas en tiempo esencialmente lineal, Matemáticas. Comp. 67 (1998), 1253-1283.
fuente
Encontré una solución interesante y elegante en el documento: Sobre la implementación de la prueba de primalidad de clase AKS, por R.Crandall y J.Papadopoulos, 18 de marzo de 2003.
fuente
ps: Todos los lg son base 2.
Código de Python:
fuente