Algoritmo de Tonelli-Shanks

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 7 de marzo de 2020; la verificación requiere 1 edición .

El algoritmo Tonelli-Shanks (llamado algoritmo RESSOL por Shanks) pertenece a la aritmética modular y se utiliza para resolver comparaciones

donde  es el módulo del residuo cuadrático , y es un número primo  impar .

El algoritmo Tonelli-Shanks no se puede utilizar para módulos compuestos; la búsqueda de raíces cuadradas módulo compuesto es computacionalmente equivalente a la factorización [1] .

Una versión equivalente pero un poco más complicada de este algoritmo fue desarrollada por Alberto Tonelli en 1891. La versión del algoritmo discutida aquí fue desarrollada de forma independiente por Daniel Shanks en 1973.

Algoritmo

Datos de entrada :  — un número primo impar,  — un número entero que es un módulo de residuo cuadrático , en otras palabras , donde  está el símbolo de Legendre .

El resultado del algoritmo : un residuo que satisface la comparación .

  1. Seleccionamos potencias de dos de , es decir, sea , donde impar, . Tenga en cuenta que si , es decir , la solución está determinada por la fórmula . A continuación, suponemos .
  2. Elegimos un no residuo cuadrático arbitrario , es decir, el símbolo de Legendre , y establecemos .
  3. Deja también
  4. Ejecutamos el ciclo:
    1. Si , entonces el algoritmo devuelve .
    2. De lo contrario, en el bucle encontramos el más pequeño , , tal que iterando al cuadrado.
    3. Let , y let , volver al comienzo del ciclo.

Después de encontrar la solución de comparación, la segunda solución de comparación se encuentra como .

Ejemplo

Hagamos una comparación .  es impar, y como , 10 es un residuo cuadrático según el criterio de Euler .

Dado que , obviamente , de aquí obtenemos 2 soluciones de comparación.

Prueba

deja _ Vamos ahora y , tenga en cuenta que . La última comparación sigue siendo cierta después de cada iteración del bucle principal del algoritmo. Si en algún momento , el algoritmo termina con .

Si , entonces considere el módulo cuadrático sin residuos . Sea , entonces y , lo que demuestra que el orden es .

De manera similar, obtenemos que , por lo que el orden divide a , por lo que el orden es . Dado que  es un módulo cuadrado , entonces también es un cuadrado, lo que significa que .

Supongamos que y , y . Como antes, se conserva; sin embargo, en esta construcción , ambos y tienen orden . De ello se deduce que tiene el orden , donde .

Si , entonces , y el algoritmo se detiene, regresando . De lo contrario, reiniciamos el bucle con definiciones similares hasta que obtenemos , que es igual a 0. Dado que la secuencia de naturales es estrictamente decreciente, el algoritmo termina.

Velocidad del algoritmo

El algoritmo Tonelli-Shanks funciona en promedio (sobre todas las entradas posibles (residuos cuadráticos y no residuos))

módulo de multiplicaciones, donde  es el número de dígitos en la representación binaria , y  es el número de unos en la representación binaria . Si el no residuo cuadrático requerido se calcula comprobando uno elegido al azar para saber si es un no residuo cuadrático, entonces, en promedio, esto requiere calcular dos símbolos de Legendre [2] . Dos como el número promedio de símbolos de Legendre calculados se explica de la siguiente manera: la probabilidad de que sea un residuo cuadrático es  : la probabilidad es mayor a la mitad, por lo que en promedio tomará alrededor de dos comprobaciones si es un residuo cuadrático.

Esto demuestra que, en la práctica, el algoritmo de Tonelli-Shanks funcionará muy bien si el módulo es aleatorio, es decir, cuando no es particularmente grande en relación con el número de dígitos en la representación binaria . El algoritmo de Cipolla funciona mejor que el algoritmo de Tonelli-Shanks si y solo si . Sin embargo, si en su lugar se usa el algoritmo de Sutherland para realizar el logaritmo discreto en el subgrupo 2- Sylow de , esto permite que el número de multiplicaciones en la expresión sea reemplazado por un valor acotado asintóticamente [3] . De hecho, basta con encontrar uno que satisfaga incluso entonces (nótese que es un múltiplo de 2, ya que  es un residuo cuadrático).

El algoritmo requiere encontrar un no residuo cuadrático . Por el momento, no existe un algoritmo determinista , que encontraría tal , en tiempo polinomial de longitud . Sin embargo, si la hipótesis de Riemann generalizada es verdadera, entonces hay un no residuo cuadrático , [4] , que es fácil de encontrar verificando dentro de los límites especificados en tiempo polinomial . Esta es, por supuesto, una estimación del peor de los casos, ya que, como se muestra arriba, basta con verificar en promedio 2 aleatorios para encontrar un no residuo cuadrático.

Aplicación

El algoritmo de Tonelli-Shanks se puede utilizar para encontrar puntos en una curva elíptica sobre un campo de residuos . También se puede utilizar para cálculos en el criptosistema Rabin .

Generalización

El algoritmo de Tonelli-Shanks se puede generalizar a cualquier grupo cíclico (en lugar de ) ya encontrar raíces de grado ésimo para un natural arbitrario , en particular, a calcular las raíces de grado ésimo en un campo finito [5] .

Si hay muchas raíces cuadradas a calcular en un mismo grupo cíclico y no muy grandes, para mejorar y simplificar el algoritmo y aumentar su velocidad, se puede preparar una tabla de raíces cuadradas de los cuadrados de los elementos de la siguiente manera:

  1. Destacamos potencias de dos en : sea tal que , sea impar.
  2. deja _
  3. Encontremos la raíz de la tabla de razones y pongamos
  4. Volver _

Notas

  1. Oded Goldreich, Complejidad computacional: una perspectiva conceptual , Cambridge University Press, 2008, p. 588.
  2. Gonzalo Tornaria , Raíces cuadradas módulo p  (enlace no disponible) , página 2.
  3. Sutherland, Andrew V. (2011), Computación de estructura y logaritmos discretos en grupos p abelianos finitos , Matemáticas de computación Vol. 80: 477–500 , DOI 10.1090/s0025-5718-10-02356-2 
  4. Bach, Eric (1990), Límites explícitos para las pruebas de primalidad y problemas relacionados , Matemáticas de computación Vol. 55 (191): 355–380 , DOI 10.2307/2008811 
  5. LM Adleman, K. Manders, G. Miller: 1977, "Sobre echar raíces en campos finitos". En: 18º Simposio IEEE sobre Fundamentos de Ciencias de la Computación. pags. 175–177.

Literatura

Enlaces