stringtranslate.com

Símbolo de Jacobi

Carl Gustav Jacob Jacobi quien introdujo el símbolo.

Símbolo de Jacobi ( a/norte) ​​para varios k (en la parte superior) y n (en el lado izquierdo). Solo se muestran 0 ≤ k < n , ya que debido a la regla (2) a continuación, cualquier otro k puede reducirse módulo n . Los residuos cuadráticos están resaltados en amarillo; tenga en cuenta que ninguna entrada con un símbolo de Jacobi de −1 es un residuo cuadrático, y si k es un residuo cuadrático módulo un coprimo n , entonces ( a/norte) ​​= 1 , pero no todas las entradas con un símbolo de Jacobi de 1 (ver lasfilas n = 9 y n = 15 ) son residuos cuadráticos. Observe también que cuando n o k es un cuadrado, todos los valores son no negativos.

El símbolo de Jacobi es una generalización del símbolo de Legendre . Introducido por Jacobi en 1837, [1] es de interés teórico en la aritmética modular y otras ramas de la teoría de números , pero su uso principal es en la teoría de números computacionales , especialmente en las pruebas de primalidad y la factorización de números enteros ; estas a su vez son importantes en criptografía .

Definición

Para cualquier entero a y cualquier entero impar positivo n , el símbolo de Jacobi ( a/norte) ​​se define como el producto de los símbolos de Legendre correspondientes a los factores primos de n :

dónde

es la factorización prima de n .

El símbolo de Legendre ( a/pag) ​​se define para todos los números enteros a y todos los primos impares p por

Siguiendo la convención normal para el producto vacío, ( a/1) ​​= 1.

Cuando el argumento inferior es un primo impar, el símbolo de Jacobi es igual al símbolo de Legendre.

Tabla de valores

La siguiente es una tabla de valores del símbolo de Jacobi ( a/norte) ​​con n  ≤ 59, k  ≤ 30, n impar.

Propiedades

Los siguientes hechos, incluso las leyes de reciprocidad, son deducciones directas de la definición del símbolo de Jacobi y las propiedades correspondientes del símbolo de Legendre. [2]

El símbolo de Jacobi se define solo cuando el argumento superior ("numerador") es un entero y el argumento inferior ("denominador") es un entero impar positivo.

1. Si n es primo (impar), entonces el símbolo de Jacobi ( a/norte) ​​es igual a (y se escribe igual que) el símbolo de Legendre correspondiente.
2. Si ab  (mod n ) , entonces
3.

Si el argumento superior o inferior es fijo, el símbolo de Jacobi es una función completamente multiplicativa en el argumento restante:

4.
5.

La ley de reciprocidad cuadrática : si m y n son números enteros coprimos positivos impares, entonces

6.

y sus suplementos

7. ,

y

8.

Combinando las propiedades 4 y 8 obtenemos:

9.

Al igual que el símbolo de Legendre:

Pero, a diferencia del símbolo de Legendre:

Si ( a/norte)  ​​= 1 entonces a puede ser o no un residuo cuadrático módulo n .

Esto se debe a que para que a sea un residuo cuadrático módulo n , tiene que ser un residuo cuadrático módulo cada factor primo de n . Sin embargo, el símbolo de Jacobi es igual a uno si, por ejemplo, a es un no residuo módulo exactamente dos de los factores primos de n .

Aunque el símbolo de Jacobi no puede interpretarse uniformemente en términos de cuadrados y no cuadrados, puede interpretarse uniformemente como el signo de una permutación según el lema de Zolotarev .

El símbolo de Jacobi ( a/norte) ​​es un carácter de Dirichlet para el módulo n .

Calculando el símbolo de Jacobi

Las fórmulas anteriores conducen a un algoritmo O (log a log b ) [3] eficiente para calcular el símbolo de Jacobi, análogo al algoritmo euclidiano para hallar el mcd de dos números. (Esto no debería sorprender a la luz de la regla 2).

  1. Reduce el "numerador" módulo el "denominador" usando la regla 2.
  2. Extrae cualquier "numerador" par usando la regla 9.
  3. Si el "numerador" es 1, las reglas 3 y 4 dan un resultado de 1. Si el "numerador" y el "denominador" no son coprimos, la regla 3 da un resultado de 0.
  4. De lo contrario, el "numerador" y el "denominador" ahora son números enteros coprimos positivos impares, por lo que podemos invertir el símbolo usando la regla 6 y luego regresar al paso 1.

Además del código a continuación, Riesel [4] lo tiene en Pascal.

Implementación enLua

función  jacobi ( n ,  k )  assert ( k  >  0  y  k  %  2  ==  1 )  n  =  n  %  k  t  =  1  mientras  n  ~=  0  hacer  mientras  n  %  2  ==  0  hacer  n  =  n  /  2  r  =  k  %  8  si  r  ==  3  o  r  ==  5  entonces  t  =  - t  fin  fin  n ,  k  =  k ,  n  si  n  %  4  ==  3  y  k  %  4  ==  3  entonces  t  =  - t  fin  n  =  n  %  k  fin  si  k  ==  1  entonces  devuelve  t  de lo contrario  devuelve  0  fin fin

Implementación enC++

// a/n se representa como (a,n) int jacobi ( int a , int n ) { assert ( n > 0 && n % 2 == 1 ); //paso 1 a = ( a % n + n ) % n ; //Manejar (a < 0) int t = 1 ; int r ; //paso 3 while ( a != 0 ) { //paso 2 while ( a % 2 == 0 ) { a /= 2 ; r = n % 8 ; if ( r == 3 || r == 5 ) { t = - t ; } } //paso 4 r = n ; n = a ; a = r ; if ( a % 4 == 3 && n % 4 == 3 ) { t = - t ; } a = a % n ; } si ( n == 1 ) { devolver t ; } de lo contrario { devolver 0 ; } }                                                                                                               

Ejemplo de cálculos

El símbolo de Legendre ( a/pag) ​​solo se define para primos impares p . Obedece las mismas reglas que el símbolo de Jacobi (es decir, la reciprocidad y las fórmulas suplementarias para ( -1/pag) ​​y ( 2/pag) ​​y la multiplicidad del "numerador".)

Problema: Dado que 9907 es primo, calcula ( 1001/9907) ​​.

Usando el símbolo de Legendre

Usando el símbolo de Jacobi

La diferencia entre ambos cálculos es que cuando se utiliza el símbolo de Legendre, el "numerador" debe factorizarse en potencias primos antes de invertir el símbolo. Esto hace que el cálculo con el símbolo de Legendre sea significativamente más lento que el que utiliza el símbolo de Jacobi, ya que no se conoce ningún algoritmo de tiempo polinomial para factorizar números enteros. [5] De hecho, esta es la razón por la que Jacobi introdujo el símbolo.

Prueba de primalidad

Existe otra forma en la que los símbolos de Jacobi y Legendre difieren. Si se utiliza la fórmula del criterio de Euler módulo un número compuesto, el resultado puede ser o no el valor del símbolo de Jacobi y, de hecho, puede que ni siquiera sea −1 o 1. Por ejemplo,

Entonces, si no se sabe si un número n es primo o compuesto, podemos elegir un número aleatorio a y calcular el símbolo de Jacobi (a/norte) y compararlo con la fórmula de Euler; si difieren módulo n , entonces n es compuesto; si tienen el mismo residuo módulo n para muchos valores diferentes de a , entonces n es " probablemente primo ".

Esta es la base de la prueba de primalidad probabilística de Solovay-Strassen y refinamientos como la prueba de primalidad de Baillie-PSW y la prueba de primalidad de Miller-Rabin .

Como uso indirecto, es posible utilizarlo como una rutina de detección de errores durante la ejecución de la prueba de primalidad de Lucas-Lehmer que, incluso en hardware de computadoras modernas, puede tardar semanas en completarse cuando se procesan números de Mersenne superiores a (el mayor primo de Mersenne conocido a octubre de 2024). En casos nominales, el símbolo de Jacobi:

Esto también es válido para el residuo final y, por lo tanto, se puede utilizar como verificación de la validez probable. Sin embargo, si se produce un error en el hardware, existe un 50 % de posibilidades de que el resultado sea 0 o 1, y no cambie con los términos subsiguientes (a menos que se produzca otro error y vuelva a cambiarlo a -1).

Véase también

Notas

  1. ^ Jacobi, CGJ (1837). "Über die Kreisteilung und ihre Anwendung auf die Zahlentheorie". Bericht Ak. Wiss. Berlín : 127-136.
  2. ^ Ireland & Rosen págs. 56-57 o Lemmermeyer pág. 10
  3. ^ Cohen, págs. 29-31
  4. ^ pág. 285
  5. ^ El tamiz de campos numéricos , el algoritmo más rápido conocido, requiere
    Operaciones para factorizar n . Véase Cohen, pág. 495.

Referencias

Enlaces externos