stringtranslate.com

Algoritmo de Tonelli-Shanks

El algoritmo Tonelli-Shanks (al que Shanks denomina algoritmo RESSOL) se utiliza en aritmética modular para resolver r en una congruencia de la forma r 2n (mod p ), donde p es un primo : es decir, para encontrar una raíz cuadrada de n módulo p .

El método Tonelli-Shanks no se puede utilizar para módulos compuestos: encontrar raíces cuadradas módulo números compuestos es un problema computacional equivalente a la factorización de enteros . [1]

Alberto Tonelli [2] [3] desarrolló en 1891 una versión equivalente, pero ligeramente más redundante, de este algoritmo. La versión que aquí se analiza fue desarrollada independientemente por Daniel Shanks en 1973, quien explicó:

Mi tardanza en conocer estas referencias históricas se debió a que le había prestado el Volumen 1 de la Historia de Dickson a un amigo y nunca me lo devolvió. [4]

Según Dickson, [3] el algoritmo de Tonelli puede tomar raíces cuadradas de x módulo potencias primas p λ aparte de los primos.

Ideas centrales

Dado un número distinto de cero y un número primo (que siempre será impar), el criterio de Euler nos dice que tiene raíz cuadrada (es decir, es un residuo cuadrático ) si y solo si:

.

Por el contrario, si un número no tiene raíz cuadrada (no es residuo), el criterio de Euler nos dice que:

.

No es difícil encontrar tal , porque la mitad de los números enteros entre 1 y tienen esta propiedad. Por lo tanto, suponemos que tenemos acceso a dicho residuo no válido.

Al dividir (normalmente) por 2 repetidamente, podemos escribir como , donde es impar. Tenga en cuenta que si intentamos

,

entonces . Si , entonces es una raíz cuadrada de . De lo contrario, para , tenemos y que satisface:

Si, dada una elección de y para un particular que satisface lo anterior (donde no es una raíz cuadrada de ), podemos calcular fácilmente otro y para tal que se cumplan las relaciones anteriores, entonces podemos repetir esto hasta que se convierta en una raíz -ésima de 1, es decir, . En ese punto es una raíz cuadrada de .

Podemos comprobar si es una raíz cuadrada de 1 elevándola al cuadrado varias veces y comprobar si es 1. Si lo es, no necesitamos hacer nada, ya que funciona la misma elección de y . Pero si no lo es, debe ser -1 (porque elevándola al cuadrado da 1, y solo puede haber dos raíces cuadradas 1 y -1 de 1 módulo ).

Para encontrar un nuevo par de y , podemos multiplicar por un factor , que se determinará. Luego, se debe multiplicar por un factor para mantener . Por lo tanto, cuando es -1, debemos encontrar un factor que sea una raíz -ésima de 1, o equivalentemente, sea una raíz -ésima de -1.

El truco aquí es hacer uso de , el residuo no conocido. El criterio de Euler aplicado a lo que se muestra arriba dice que es una raíz -ésima de -1. Por lo tanto, al elevar al cuadrado repetidamente, tenemos acceso a una secuencia de raíz -ésima de -1. Podemos seleccionar la correcta para que sirva como . Con un poco de mantenimiento de variables y compresión de casos triviales, el algoritmo siguiente surge de manera natural.

El algoritmo

Las operaciones y comparaciones sobre elementos del grupo multiplicativo de números enteros módulo p son implícitamente mod p .

Entradas :

Salidas :

Algoritmo :

  1. Al factorizar potencias de 2, encuentre Q y S tales que con Q impar
  2. Búsqueda de una z en la que haya un residuo cuadrático no válido
  3. Dejar
  4. Bucle:
    • Si t = 0, devuelve r = 0
    • Si t = 1, devuelve r = R
    • De lo contrario, utilice el cuadrado repetido para encontrar el menor i , 0 < i < M , tal que
    • Sea , y establezca

Una vez que hayas resuelto la congruencia con r, la segunda solución es . Si el menor i tal que es M , entonces no existe solución para la congruencia, es decir, n no es un residuo cuadrático.

Esto es más útil cuando p ≡ 1 (mod 4).

Para primos tales que p ≡ 3 (mod 4), este problema tiene posibles soluciones . Si satisfacen , son las únicas soluciones. Si no, , n es un residuo cuadrático no residual y no hay soluciones.

Prueba

Podemos demostrar que al comienzo de cada iteración del bucle se cumplen las siguientes invariantes del bucle :

Inicialmente:

En cada iteración, con M' , c' , t' , R' los nuevos valores reemplazan a M , c , t , R :

A partir de la prueba contra t = 1 al comienzo del bucle, vemos que siempre encontraremos un i en 0 < i < M tal que . M es estrictamente menor en cada iteración y, por lo tanto, se garantiza que el algoritmo se detendrá. Cuando alcanzamos la condición t = 1 y nos detenemos, el último invariante del bucle implica que R 2 = n .

Orden dea

Podemos expresar alternativamente los invariantes del bucle utilizando el orden de los elementos:

Cada paso del algoritmo mueve t a un subgrupo más pequeño midiendo el orden exacto de t y multiplicándolo por un elemento del mismo orden.

Ejemplo

Resolviendo la congruencia r 2 ≡ 5 (mod 41). 41 es primo como se requiere y 41 ≡ 1 (mod 4). 5 es un residuo cuadrático por el criterio de Euler: (como antes, las operaciones en son implícitamente mod 41).

  1. entonces ,
  2. Encuentra un valor para z:
    • , por lo que 2 es un residuo cuadrático según el criterio de Euler.
    • , por lo tanto 3 es un no residuo cuadrático: conjunto
  3. Colocar
  4. Bucle:
    • Primera iteración:
      • , así que no hemos terminado
      • , entonces
    • Segunda iteración:
      • , así que todavía no hemos terminado
      • entonces
    • Tercera iteración:
      • , y hemos terminado; volvamos

De hecho, 28 2 ≡ 5 (mod 41) y (−28) 2 ≡ 13 2 ≡ 5 (mod 41). Por lo tanto, el algoritmo arroja las dos soluciones de nuestra congruencia.

Velocidad del algoritmo

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

multiplicaciones modulares, donde es el número de dígitos en la representación binaria de y es el número de unos en la representación binaria de . Si el residuo cuadrático no requerido se debe encontrar comprobando si un número tomado al azar es un residuo cuadrático no, requiere (en promedio) cálculos del símbolo de Legendre . [5] El promedio de dos cálculos del símbolo de Legendre se explica de la siguiente manera: es un residuo cuadrático con probabilidad , que es menor que pero , por lo que en promedio necesitaremos comprobar si a es un residuo cuadrático dos veces.

Esto demuestra esencialmente que el algoritmo de Tonelli-Shanks funciona muy bien si el módulo es aleatorio, es decir, si no es particularmente grande con respecto al número de dígitos en la representación binaria de . Como se escribió anteriormente, el algoritmo de Cipolla funciona mejor que Tonelli-Shanks si (y solo si) . Sin embargo, si en cambio se utiliza el algoritmo de Sutherland para realizar el cálculo del logaritmo discreto en el subgrupo 2-Sylow de , se puede reemplazar con una expresión que esté asintóticamente limitada por . [6] Explícitamente, se calcula de modo que y luego satisface (nótese que es un múltiplo de 2 porque es un residuo cuadrático).

El algoritmo requiere que encontremos un residuo no cuadrático . No se conoce ningún algoritmo determinista que se ejecute en tiempo polinomial para encontrar dicho residuo . Sin embargo, si la hipótesis generalizada de Riemann es verdadera, existe un residuo no cuadrático , [7] lo que hace posible verificar cada hasta ese límite y encontrar un adecuado dentro del tiempo polinomial . Sin embargo, tenga en cuenta que este es el peor escenario posible; en general, se encuentra en un promedio de 2 ensayos como se indicó anteriormente.

Usos

El algoritmo de Tonelli-Shanks puede utilizarse (naturalmente) para cualquier proceso en el que sean necesarias raíces cuadradas módulo primo. Por ejemplo, puede utilizarse para encontrar puntos en curvas elípticas . También es útil para los cálculos en el criptosistema de Rabin y en el paso de cribado del tamiz cuadrático .

Generalizaciones

El método de Tonelli-Shanks se puede generalizar a cualquier grupo cíclico (en lugar de ) y a las raíces k para cualquier entero k , en particular para tomar la raíz k de un elemento de un cuerpo finito . [8]

Si se deben realizar muchas raíces cuadradas en el mismo grupo cíclico y S no es demasiado grande, se puede preparar de antemano una tabla de raíces cuadradas de los elementos de orden 2-potencia y simplificar y acelerar el algoritmo de la siguiente manera.

  1. Factorizar potencias de 2 de p − 1, definiendo Q y S como: con Q impar.
  2. Dejar
  3. Encuentra de la tabla tal que y establece
  4. devolver R .

El algoritmo de Tonelli funcionará en mod p^k

Según la "Teoría de los números" de Dickson [3]

A. Tonelli [9] dio una fórmula explícita para las raíces de [3]

La referencia de Dickson muestra la siguiente fórmula para la raíz cuadrada de .

cuando , o (s debe ser 2 para esta ecuación) y tal que
Para entonces
dónde

Tomando nota de eso y tomando nota de eso entonces

Para tomar otro ejemplo: y

Dickson también atribuye la siguiente ecuación a Tonelli:

donde y ;

Usando y empleando el módulo de la matemática se sigue:

Primero, encuentre la raíz cuadrada modular mod , lo que se puede hacer mediante el algoritmo de Tonelli regular:

y por lo tanto

Y aplicando la ecuación de Tonelli (ver arriba):

La referencia de Dickson [3] muestra claramente que el algoritmo de Tonelli funciona con módulos de .

Notas

  1. ^ Oded Goldreich, Complejidad computacional: una perspectiva conceptual , Cambridge University Press, 2008, pág. 588.
  2. ^ Volker Diekert; Manfred Kufleitner; Gerhard Rosenberger; Ulrich Hertrampf (24 de mayo de 2016). Métodos algebraicos discretos: aritmética, criptografía, autómatas y grupos. De Gruyter. págs. 163-165. ISBN 978-3-11-041632-9.
  3. ^ abcde Leonard Eugene Dickson (1919). Historia de la teoría de los números. Vol. 1. Washington, Carnegie Institution of Washington. págs. 215–216.
  4. ^ Daniel Shanks. Cinco algoritmos de teoría de números. Actas de la Segunda Conferencia de Manitoba sobre Matemáticas Numéricas. Págs. 51–70. 1973.
  5. ^ Gonzalo Tornaria - Raíces cuadradas módulo p, página 2 https://doi.org/10.1007%2F3-540-45995-2_38
  6. ^ Sutherland, Andrew V. (2011), "Cálculo de estructuras y logaritmos discretos en p-grupos abelianos finitos", Matemáticas de la computación , 80 (273): 477–500, arXiv : 0809.3413 , doi :10.1090/s0025-5718-10-02356-2, S2CID  13940949
  7. ^ Bach, Eric (1990), "Límites explícitos para pruebas de primalidad y problemas relacionados", Mathematics of Computation , 55 (191): 355–380, doi : 10.2307/2008811 , JSTOR  2008811
  8. ^ Adleman, LM, K. Manders y G. Miller: 1977, «Sobre la toma de raíces en campos finitos». En: 18.º Simposio IEEE sobre Fundamentos de la Ciencia de la Computación, págs. 175-177
  9. ^ "Accademia nazionale dei Lincei, Roma. Rediconti, (5), 1, 1892, 116-120".

Referencias