Índice general 1. Resumen 2 2. Introducción 3 3. Marco Teórico 6 3.1. Números Primos . . . . . . . . . . . . . . . . . . . . . . . . . . 6 3.2. Nociones sobre la hipótesis de Riemann . . . . . . . . . . . . . . 20 3.3. Nociones sobre la hipótesis extendida de Riemann . . . . . . . . 28 3.4. Curvas Elı́pticas . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4. Materı́ales y Métodos 37 5. Resultados 38 5.1. Algoritmo de primalidad de Agrawal, Kayal y Saxena . . . . . . 40 5.2. El algoritmo de primalidad con curvas elı́pticas . . . . . . . . . 46 6. Discusión 50 7. Referencias Bibliográficas 51 8. Apendice/Anexos 53 Capı́tulo 1 Resumen En el presente trabajo hacemos el estudio de dos algoritmos eficientes de primalidad, uno de ellos basado en teorı́a elemental de números: el algoritmo AKS, manejable y accesible por la gran mayorı́a y con las mejoras, ajustes y contribuciones de Lenstra, Berstein y Berizbetia el algotritmo tiene un tiempo promedio de O(logn6 ), que lo hace eficiente; y el otro basado en la teorı́a de curvas elı́pticas, que aunque no es una teorı́a sencilla, con ella se obtiene resultados precisos de primalidad. Iniciamos presentando algunos conceptos y propiedades de los números primos y hacemos de una breve explicación de la hipótesis de Riemann, uno de los siete problemas del milenio, que tiene como premio un millón de dólares ofrecido por el Clay Mathematical Institute. Establecemos la relación de la hipótesis de Riemman con las pruebas de primalidad, detallamos el algoritmo de Agrawal, Kayal y Saxena (AKS). Hacemos también un breve estudio de la teorı́a curvas elı́pticas, para aplicarla a algoritmos de primalidad. El algoritmo usando curvas elı́pticas, aunque se basa en una teorı́a con cierto grado de dificultad, pues usa una teorı́a basada en algoritmos para determinar el números de puntos de curvas elı́pticas, en generar curvas de deterninado orden especı́fico que sea apropiado al problema a tratar, que no es tarea fácil y es de investigación actual, lo que lo hace poco accesible por las mayorı́as, es más preciso que el algoritmo AKS. Tanto el método AKS como el método de curvas elı́pticas, tiene sus ventajas y sus desventajas; para optimizar los resultados es conveniente combinarlos para obtener resultados más eficientes. 2 Capı́tulo 2 Introducción Desde los tiempos de Pitágoras los números primos han sido objeto de estudio; de seguro, algunas de sus más elementales propiedades ya eran conocidas desde mucho tiempo antes. Probablemente las primeros en descubrirlos fueron las hombres del neolı́tico, que luego de recolectar alimentos para el grupo, debieron enfrentarse al problema de repartirlo; si la casualidad, o la mala suerte aparecı́a y la colecta constaba de un número primo de elementos, se habrán dado cuenta de la imposibilitad de repartirlo de forma equitativa. El interés que han suscitado los números primos, ha sido muy variado; desde el interés puramente espiritual de los griegos (que los consideraban bello) al que suscitaba durante el siglo XVIII-XIX como un problema matemático “difı́cil”. A lo largo de la historia, han creado muchas formas y métodos para tratar de certificar que un número es primo o no; a esto comúnmente se le denomina test de primalidad o simplemente PRIMES y es un ejemplo muy instructivo de como un mismo problema a ido cambiando su complejidad algorı́tmica a lo largo de los años. Actualmente, el interés por los primos, se debe al avance de la criptografı́a; pues el principal uso que se le está dando a los números primos actualmente es el de generar claves criptográficas, los métodos criptográficos actuales, usan números primos de muchas cifras , exageradamente grandes (llamados primos industriales, tı́picamente de 256 dı́gitos o bits ) como parte fundamental del proceso de encriptación. Por lo que es fundamental tener algoritmos rápidos 3 y eficientes que certifiquen la primalidad, esto muestra la importancia de este trabajo de investigación. Las pruebas de primalidad, constituye uno de los temas más florecientes de la teorı́a de números en la actualidad, debido al desarrollo de la criptografı́a. La criptografı́a se puede definir como el arte o ciencia de cifrar y descifrar información, utilizando por ejemplo técnicas matemáticas que hagan posible el intercambio de mensajes de manera que sólo puedan ser leı́dos por las personas a quienes van dirigidos. La finalidad de la criptografı́a es garantizar el secreto en la comunicación entre dos entidadaes (personas, organizaciones, etc) y asegurar que la información que se envı́a sea auténtica, esto es, que el remitente sea realmente quien dice ser y que el contenido del mensaje enviado no haya sido modificado en su tránsito; por lo que investigaciones sobre primalidad estan extremadamente justificadas. Si preguntamos a la gente comun, ¿cómo hace para saber si un número es primo o no? Lo más probable es que conteste que miremos la tabla de números primos o dirı́a que probemos a dividir por todos los números menores que él, si es realmente listo, dirı́a que solo hace falta hasta su raı́z cuadrada, estas ideas simples fueron realmente los primeros test de primalidad. El primero es conocido como la criba de Eratóstenes, debido a Eratóstenes (siglo II a.C.). Hay una larga lista de algoritmos que se han desarrollado e implementado posteriormente, de algunos hablaremos en este trabajo, pero hableremos extensamente del algoritmo AKS. Otros algoritmos importantes como el ECPP es el presentado por Goldwasser y Kilian, basado en curvas elı́pticas. El orden de este algoritmo es O(log6(n)), pero no en el caso peor, sino en el caso medio (esto es, para casi todas las entradas es polinomial, pero existen algunos inputs para los que es exponencial). Actualmente las certificaciones de primalidad se realizan con implementaciones y mejoras de este algoritmo y es la manera mas eficaz de verificar si un número de 100 o 200 cifras es primo, es usar el Test de la curva elı́ptica, descubierto en la decada de 1990; el estudio de las curvas elı́pticas que combina técnicas del algebra, análisis, teorı́a de números y geometrı́a algebraica, es una de las areas más ricas de la 4 matemática. Es precisamente esta mezcla de diferentes ramas de la matemática, hace que un estudio profundo de esta teorı́a resulte una tarea para nada fácil, ya que este debe aprender varios temas que ya por sı́ solos son complicados, esto sólo para tener los requisitos necesarios para poder empezar un estudio de los tratados más avanzados; uno de los exitos más recientes y que provocó gran asombro entre los matemáticos fue la demostración del Último teorema de Fermat, realizada por A. Wiles; siendo, que en realidad lo que Walis probó, una conjetura sobre curvas elı́pticas formulada alrededor de 1950, y que según ya se sabı́a, tenı́a como consecuencia el resultado dado por Fermat. Tal es la influencia de las curvas elı́pticas que también tienen aplicaciones prácticas no solo en primalidad, sino también en algoritmos de factorización de números enteros y en varios algoritmos criptográficos. 5 Capı́tulo 3 Marco Teórico 3.1. Números Primos Decimos que un número entero no nulo p ̸= ±1 es primo, si los únicos factores de p son ±1 y ±p. Un número entero no nulo n ̸= ±1 , que no es primo, es llamado compuesto. Notar que 0 y ±1 no son compuestos ni primos. Teorema 3.1.1. (TFA) Todo entero positivo n (n ≥ 2) , se puede escribir de manera única en la forma n = pe11 · · · pekk , donde 1 < p1 < · · · < pk son números primos y e1 , · · · , ek son enteros positivos. Este teorema nos dice que la factorizacin de un entero no nulo en primos existe y segundo, que ésta factorización es única. Por éste teorema 1 y −1 no pueden ser considerados como números primos, pues si lo fueran, podrı́amos tener que 36 = 1 · 22 · 32 = 13 · 22 · 32 = 17 · 22 · 32 etc.; es decir cada número compuesto admitirı́a infinidad de factorizaciones distintas. Distribución de los números primos Los números primos han interesado a los matemáticos desde hace por lo menos 2000 aos, por ejemplo Euclides se ocupa de ellos, en los Elementos, demostrando la existencia de infinitos números primos. Este interés es justificado ya que por el TFA sabemos que todo número natural n ≥ 2 se expresa, de manera única, como producto de primos (los que van “primero”), 6 más aún, este tema es lo suficientemente complejo para que este interés, se haya podido mantener hasta la actualidad. El conjunto de los números primos obedece a un orden asimétrico, por lo que siempre ha resultado un problema entender sus leyes de distribución. En 1859, Riemann abrió una nueva puerta para la investigación de los números primos y las investigaciones sobre números primos se dividieron en dos lı́neas una que se encarga de ver la cantidad de números primos hasta un número dado (Teorema de los Números Primos) y la otra que busca probar primalidad. La función zeta forma parte de la primera lı́nea, logrando una fusión entre la aritmética y el análisis. Riemann trató de encontrar una fórmula o un método simple para calular la cantidad de primos hasta un número x, y aunque no cumplió su cometido sentó las bases para que posteriormente se pudiesen lograr algunas aproximaciones al Teorema de los Números Primos. Definición 3.1.2 (Función de Euler). Se define la función π : R → N, π(x) = ∑ 1 p≤x donde el ı́ndice p varı́a sólo en el conjunto de números primos. Teorema 3.1.3 (Teorema de los Números Primos (TNP)). La función ∑ π(x) = 1, cumple que : p≤x lı́m π(x) = x→∞ logx . x donde log denota el logaritmo natural. Este resultado fue conjeturado por varios matemáticos, entre ellos, por Legendre y Gauss, pero la demostración completa sólo fue presentada en 1896, independientemente por de la Vallée Poussin y Hadamard. No daremos la demostraremos este teorema, pero demostraremos del siguiente resultado debido a Tchebycheff que es una versión débil del TNP. 7 Proposición 3.1.4. Existen constantes positivas c > C tales que c x C < π(x) < C log x log x para todo x ≥ 2. Prueba. Tenemos que ( ) ∑ (2n) 2n < = 22n , n k 0≤k≤2n y como (2n) n = (2n)! n!n! es múltiplo de todos los primos p que satisfacen n < p ≤ 2n, se sigue que el producto de los primos entre n y 2n es menor que 22n . Como hay π(2n) − π(n) primos como esos, se sigue que nπ(2n)−π(n) < 22n (pues todos eso primos son mayores que n), donde (π(2n) − π(n)) log n < 2n log 2 y π(2n) − π(n) < 2n log 2 . log n Eso implica fácilmente, por inducción, que π(2k+1 ) ≤ 5 · 2k k (a partir de k = 5; hasta k = 5 se sigue de π(n) ≤ n/2). De ahı́ se sigue que si 2k < x ≤ 2k+1 entonces π(x) ≤ 5 · 2k 5x log 2 ≤ k log x pues f (x) = x log / log x es una función creciente para x ≥ 3. Vamos ahora a probar otra desigualdad. El exponente del primo p en la factorización de n! es ⌊ ⌋ ⌊ ⌋ n n ωp (n) = + 2 + ··· p p ⌊ ⌋ ∞ ∑ n = pk k=1 ⌊ ⌋ (esta es una suma finita pues si k > logp n = log n/ log p entonces pnk = 0). ⌊ ⌋ ⌊ ⌋ De hecho, n+1 − pnk es siempre 0 ó 1, y es igual a 1 si, y sólo si, pj divide j p 8 n + 1. Ası́, ωp (n + 1) − ωp (n) es igual al exponente de p en la factorización de n + 1, lo que provee una prueba por inducción del hecho arriba. ( ) Ası́, el exponente de p en 2n = (2n)!/n!2 es n ⌋ ∞ (⌊ ∑ 2n k=1 pk ⌊ ⌋) n −2 k . p ⌊ ⌋ ⌊n⌋ − 2 k es siempre 0 ó 1 (pues 0 ≤ x − ⌊x⌋ < 1 para Tenemos ahora que p ( ) todo x), donde el exponente de p en 2p es como máximo logp n = log n/ log p p ( ) para todo primo p. Por otra parte, si n < p ≤ 2n, el exponente de p en 2p es p ( ) (2n) ∏ 2n 1. Ası́, si n = p<2n pαp es la factorización de n entonces 2n pk ( ) ∑ 2n log = αp log p n p<2n ∑ ∑ = αp log p + log p p≤n n<p≤2n ≤ π(n) log n + (π(2n) − π(n)) log(2n) ≤ π(2n) log(2n) donde ) 2n π(2n) ≥ log ∗ log(2n) ≥ n log 2/ log(2n) n pues ( ( ) 2n n+1 2n 2n − 1 = · ··· ≥ 2n , n n n−1 1 donde π(x) ≥ x log 2 log x para todo x par, lo que implica la misma estimación para todo x entero, pues π(2k − 1) = π(2k). Corolario 3.1.5. Sea f : N → [0, +∞) una función decreciente. La serie ∞ ∑ ∑ f (n) converge. f (p) converge si, y sólo si, la serie log n n=2 p primo ∑ 1 = +∞. En particular, p p primo 9 Una aproximación más precisa para π(x) es dada por ∫ x dt Li(x) = , 0 log t donde tomamos el valor principal de esta integral, o sea, ∫ 1−ε ∫ x dt dt Li(x) = lı́m + ; ε→0 ε log t 1+ε log t claramente Li(x) = 1. x→∞ log(x)/x lı́m Se sabe, en tanto, que 3/5 (log log x)−1/5 |π(x) − Li(x)| ≤ Cxe−a(log x) para algún valor de las constantes a y C (independientes de x). En particular, para cualquier k > 0 existe C > 0 tal que para todo x, |π(x) − Li(x)| ≤ C x , (log x)k lo que muestra que Li(x) (y aún x/(log x − 1)) es una aproximación de π(x) mejor que x/ log x. La hipótesis de Riemann, ya mencionada, equivale a decir que para todo ε > 0 existe C con |π(x) − Li(x)| ≤ Cx1/2+ε ; nadie aún puede demostrar que esta estimación sea correcta, incluso para algún valor de ε < 1/2. La hipótesis de Riemann también implica que existe C con |π(x) − Li(x)| ≤ Cx1/2 log x, lo que darı́a una estimación de la magnitud de este error de forma mucho mejor de las que se saben demostrar. Por otra parte, se sabe demostrar que no puede existir ninguna estimación mucho mejor que esta para |π(x) − Li(x)|: existen una constante C > 0 y enteros x1 y x2 arbitrariamente grandes con √ x1 log log log x1 π(x1 ) − Li(x1 ) < −C log x1 √ x2 log log log x2 π(x2 ) − Li(x2 ) > C . log x2 10 Algunos resultados sobre primos Teorema 3.1.6 (Dirichlet). Dados naturales a, d con mcd(a, d) = 1, existen infinitos primos de la forma a + dn (con n natural). La demostración usual de este teorema usa variables complejas. Muchos casos particulares admiten demostraciones elementales, por ejemplo no es difı́cil probar que existen infinitos primos de la forma 4n + 3 o 6n + 5. Existen varios refinamientos conocidos del teorema de Dirichlet. Definimos πd,a (x) como el número de primos de la forma a + dn en el intervalo [2, x]. De la Vallée Poussin probó que πa,d (x) 1 = , x→+∞ π(x) φ(d) lı́m esto es, todas las posibles clases módulo d tienen aproximadamente la misma proporción de primos. Por otro lado, Tchebycheff observó que para valores pequeños de x, π3,2 (x) − π3,1 (x) y π4,3 (x) − π4,1 (x) son positivos, después Littlewood, demuestró que estas funciones cambian de signo infinitas veces. En 1957, Leech demostró que el menor valor de x para el cual π4,3 (x) − π4,1 (x) = −1 es 26861. Luego, Bays y Hudson demostraron que el menor valor de x para el cual π3,2 (x) − π3,1 (x) = −1, es 608981813029. Sean p(d, a) el menor primo de la forma a + dn, con n entero, y p(d) = máx{p(d, a) | 0 < a < d, mcd(a, d) = 1}. En 1944, Linnin demostró que existe L > 1, con p(d) < dL para todo d suficientemente grande; pero la mejor estimación conocida para L es L ≤ 5.5 debida a Heath y Brown en 1992, que también conjeturaron que p(d) ≤ Cd(log d)2 . Por otra parte, no se sabe demostrar que existen infinitos primos de la forma n2 + 1, de hecho, no existe ningún polinomio P en una variable y de grado 11 mayor que 1 para el cual se sepa demostrar que existen infinitos primos de la forma P (n), n ∈ Z. Por otra parte, existen muchos polinomios en mas de una variable que asumen infinitos valores primos, por ejemplo, se prueba fácilmente que todo primo de la forma 4n + 1 puede ser escrito también en la forma a2 + b2 , a, b ∈ Z. Por otra parte, Friedlander e Iwaniec provaron recientemente un resultado mucho más difı́cil: que existen infinitos primos de la forma a2 + b4 . Uno de los problemas abiertos más famosos de la matemática es la conjetura de Goldbach: todo número par mayor o igual a 4 es la suma de dos números primos. Chen demostró que todo número par suficientemente grande es la suma de un primo con un número entero con a lo más dos factores primos. Vinogradov demostró que todo impar suficientemente grande (por 15 ejemplo, mayor que 33 ) es una suma de tres primos. Si p y p + 2 son ambos primos, decimos que ellos son primos gemelos; y se conjetura, que existen infinitos primos gemelos. Brun, demostró que los primos gemelos son escasos en el siguiente sentido: si π2 (x) es el número de pares de primos gemelos hasta x, entonces π2 (x) < 100x (log x)2 para x suficientemente grande. En particular, ∑ 1 < +∞. p p primo gemelo Más aún se prueba que π2 (x) sea asintótico a Cx/(log x)2 para una constante positiva C y se tiene la siguiente caracterización de primos gemelos debida a Clement. Sea n ≥ 2; los enteros n y n + 2 son ambos primos si, y sólo si, 4((n + 1)! + 1) + n ≡ 0 (mód n(n + 2)). Sea pn el n-ésimo número primo. El teorema de los números primos equivale a decir que pn = 1. n→∞ n log n lı́m 12 Por otra parte, se sabe muy poco sobre el comportamiento de la función dn = pn+1 − pn . Por ejemplo, la conjetura de que existen infinitos primos gemelos equivale a decir que lı́m inf dn = 2. No se ah podido probar que L = lı́m inf dn = 0; log pn Erdös provó que L < 1 y Maier que L ≤ 0.248. Erdös también probó que el conjunto de los puntos de acumulación de dn / log pn tiene medida positiva. Por otra pate, es un teorema clásico, conocido como postulado de Bertrand, que siempre existe por los menos un primo entre m y 2m, es decir, dn < pn . En 1931, Westzynthius probó que lı́m sup dn = ∞, log pn y en 1963 Rankin, completando un trabajo de Erdos, mostró que lı́m sup dn (log log log pn )2 ≥ eγ ≈ 1.78107 log pn log log pn log log log log pn donde γ es la constante de Euler-Mascheroni, ) ( 1 1 γ = lı́m 1 + + · · · + − log n ≈ 0.5772156649; n→∞ 2 n este resultado fue mejorado posteriormente por Pomerance y Pintz, que probaron que el lado izquierdo de la desigualdad anterior es mayor o igual a 2eγ . Se conjetura que lı́m sup dn =C (log pn )2 para alguna constante positiva C. Otra conjetura famosa es que siempre hay por lo menos un primo entre n2 y (n + 1)2 . Observemos que la primera vez que dn > 1000 ocurre para pn = 1693182318746371, cuando dn = 1132, lo que fue descubierto recientemente por T. Nicely y D. Nyman. Sierpinski probó que existen infinitos números naturales k tales que k·2n +1 es compuesto para todo natural n y Riesel probó el mismo resultado para k·2n −1. Se conjetura que los menores valores de k con las propiedaes anteriores son respectivamente 78557 y 509203. 13 Algunos primos especiales. Primos de Mersenne No hay ninguna fórmula simple para generar primos arbitrariamente grandes. Existen fórmulas que generan números primos, pero son complicadas y no ayudan mucho ni a generar números primos explı́citamente ni a responder preguntas teóricas sobre la distribución de los primos. Un ejemplo de fórmula para pn , el n-ésimo primo, es ⌊ )⌋ ( ∑ µ(d) 1 1 pn = 1 − log − + , log 2 2 2d − 1 d|Pn−1 donde Pn−1 = p1 p2 · · · pn−1 . Otra fórmula es donde ⌊ n ⌋ ⌊ n−1 ⌋ n−1 pn = 102 c − 102 102 c , ∞ ∑ pn c= = 0.0203000500000007 . . . . 102n n=1 La dificultad de esta última fórmula viene del hecho que para calcular c debemos encontrar todos los primos; la fórmula serı́a más interesante si hubiera otra interpretación para el número real c, lo que parece muy improbable. Pruebas de primalidad basados en factorizaciones de n − 1 Proposición 3.1.7. Sea n > 1. Si para cada factor primo q de n − 1 existe (n−1)/q un entero aq tal que an−1 ≡ 1 (mód n) y aq q ̸ equiv1 (mód n), entonces n es primo. Prueba. Sea q kq la mayor potencia de q que divide n − 1. El orden de aq en (Z/(n))∗ es un múltiplo de q kq , donde φ(n) es un múltiplo de q kq . Como esto vale para todo factor primo q de n − 1, φ(n) es un múltiplo de n − 1 y n es primo. Proposición 3.1.8 (Pocklington). Si n − 1 = q k R, donde q es primo y existe ( ) un entero a tal que an−1 ≡ 1 (mód n) y mcd a(n−1)/q − 1, n = 1, entonces cualquier factor primo de n es congruente a 1 módulo q k . 14 Prueba. Si p es un factor primo de n, entonces an−1 ≡ 1 (mód p) y p no divide a(n−1)/q − 1, donde ordp a, el orden de a módulo p, divide n − 1 mas no divide (n − 1)/q. Ası́, q k | ordp a | p − 1, donde p ≡ 1 (mód q)k . Corolario 3.1.9. Si n − 1 = F R, con F > R y para todo factor primo q de ( ) F existe a > 1 tal que an−1 ≡ 1 (mód n) y mcd a(n−1)/q − 1, n = 1, entonces n es primo. Prueba. Sean q un factor primo de F y q k la mayor potencia de q que divide F ; por la proposición anterior, todo factor primo de n debe ser congruente a 1 módulo q k . Como esto vale para cualquier factor primo de F , se sigue que √ cualquier factor primo de n debe ser congruente a 1 módulo F . Como F > n, entonces n es primo. De hecho, basta conocer un conjunto de factores primos cuyo producto sea menor que (n − 1)1/2 para, con ayuda el resultado de Pocklington, intentar demostrar la primalidad de n (lo que dejamos como ejercicio). Los siguientes criterios son consecuencias directas de las proposiciones anteriores. n Fermat conjeturó que todo número de la forma Fn = 22 + 1 era primo, y se verifica la fórmula para n ≤ 4. Observe que 2n + 1 (y en general an + 1, con a ≥ 2) no es primo si n no es una potencia de 2; si p es un factor primo impar de n, podemos escribir an + 1 = bp + 1 = (b + 1)(bp−1 − bp−2 + · · · + b2 − b + 1), donde b = an/p . Euler mostrarı́a más tarde que F5 no es primo (tenemos F5 = 4294967297 = 641 · 6700417) y ya se demostró que Fn es compuesto n para varios otros valores de n; ningún otro primo de la forma Fn = 22 + 1 es conocido, mas se conocen muchos primos (algunos bastante grandes) de la n forma a2 + 1, que son conocidos como primos de Fermat generalizados. La prueba a seguir muestra como probar eficientemente la primalidad de Fn . n Corolario 3.1.10 (Prueba de Pépin). Sea Fn = 22 + 1. Luego Fn es primo si, y sólo si, 3(Fn −1)/2 ≡ −1 (mód Fn ). Prueba. Si 3(Fn −1)/2 ≡ −1 (mód Fn ), entonces la primalidad de Fn se sigue de la Proposición 3.1.7. Por otra parte, si Fn es primo entonces 3(Fn −1)/2 ≡ ( 3 ) ( Fn ) ( 2 ) = 3 = 3 = −1 (mód Fn ). Fn Corolario 3.1.11 (Teorema de Proth; 1878). Sea n = h · 2k + 1, con 2k > h. Luego, n es primo si, y sólo si, existe un entero a, con a(n−1)/2 ≡ −1 (mód n). 15 Prueba. Si n es primo, podemos tomar a cualquiera con (a) n = −1; es decir, la mitad enteros entre 1 y n − 1 sirve como a. La recı́proca se sigue del Corolario 3.1.9 con F = 2k . Corolario 3.1.12. Sea n = h·q k +1, con q primo y q k > h. Luego, n es primo si, ( ) y sólo si, existe un entero a, con an−1 ≡ 1 (mód n) y mcd a(n−1)/q − 1, n = 1. Prueba. Si n es primo, podemos tomar a cualquiera que no sea de la forma xq módulo n; es decir, una proporción de (q − 1)/q de entre los enteros entre 1 y n − 1 sirve como a. La recı́proca se sigue del Corolario 3.1.9 con F = qk . Una gran mayorı́a de los 100 mayores primos conocidos están en las condiciones del teorema de Proth (ver tablas). Esto se debe al hecho de que los primos de esa forma son frecuentes (más frecuentes que, por ejemplo, los primos de Mersenne) y que su primalidad es fácilmente demostrada usando este resultado. Primos de Mersenne Un número de Mersenne es un número de la forma Mp = 2p − 1. Los cinco mayores números primos conocidos actualmente son primos de Mersenne. El mayor de ellos es 213466917 −1, descubierto el 14/11/2001. Este es uno de los dos primos conocidos con más de un millón de dı́gitos, el otro es 26972593 −1 (también primo de Mersenne); ambos fueron descubiertos por GIMPS. El criterio de Lucas-Lehmer, nos brinda una prueba de primalidad bastante rápida para números de Mersenne. Veamos en primer lugar que 2p − 1 sólo puede ser primo cuando p es primo. Proposición 3.1.13. Si 2n − 1 es primo, entonces n es primo. Prueba. Si n = ab, con a, b ≥ 2, entonces 1 < 2a − 1 < 2n − 1 y 2n − 1 = 2ab − 1 = (2a )b − 1 ≡ 1b − 1 = 0 (mód 2a − 1) y 2n − 1 es compuesto. Por otra parte, no se sabe demostrar ni que existen infinitos primos de Mersenne ni que existen infinitos primos p para los cuales Mp es compuesto. Se conjetura, en tanto, que existen infinitos primos p para los cuales Mp es primo y que, si pn es el n-ésimo primo de este tipo, tenemos log pn < B < +∞ 0<A< n 16 para constantes A y B. Existen algunas conjeturas más precisas sobre el valor de lı́m √ n n→∞ pn ; Eberhart conjetura que este lı́mite existe y es igual a 3/2; Wagstaff, por otra parte, conjetura que el lı́mite sea −γ 2e ≈ 1.4757613971 donde γ es la ya mencionada constante de Euler-Mascheroni. Los primos de Mersenne son interesantes también por causa de los números perfectos. Dado n ∈ N∗ , definimos σ(n) = ∑ d, d|n la suma de los divisores (positivos) de n. Por el teorema fundamental de la aritmética demostramos fácilmente que si n = pe11 pe22 · · · pemm , con p1 < p2 < · · · < pm , entonces σ(n) = (1 + p1 + · · · + pe11 ) · · · (1 + pm + · · · + pemm ) em +1 pe11 +1 − 1 pm −1 = ··· . p1 − 1 pm − 1 En particular, si (a, b) = 1, entonces σ(ab) = σ(a)σ(b). Un entero positivo n se dice perfecto si σ(n) = 2n; los primeros números perfectos son 6, 28 y 496. Nuestro próximo resultado caracteriza los números perfectos pares. Proposición 3.1.14. Si Mp es un primo de Mersenne entonces 2p−1 Mp es perfecto. Además,todo número perfecto par es de la forma 2p−1 Mp para algún primo p,siendo Mp un primo de Mersenne. Prueba. Si Mp es primo, entonces σ(2p−1 Mp ) = (2p − 1)(Mp + 1) = 2 · 2p−1 Mp . Por otra parte,sea n = 2k b, con k > 0 y b impar, un número perfecto par. Tenemos σ(n) = 2n = σ(2k )σ(b), donde 2k+1 b = (2k+1 −1)σ(b) ≥ (2k+1 −1)(b+ 17 1), valiendo la igualdad sólo cuando b es primo. De esta desigualdadtenemos b ≤ 2k+1 − 1. Por otra parte, como (2k+1 − 1) | 2k+1 b y (2k+1 − 1, 2k+1 ) = 1, tenemos (2k+1 −1) | b y 2k+1 −1 ≤ b. Ası́, b = 2k+1 −1 y 2k+1 b = (2k+1 −1)(b+1), donde b es primo. Por la proposición 3.9, p = k + 1 es primo, b = Mp y n = 2p−1 Mp . Por otra parte, uno de los problemas abiertos más antiguos de la matemática es el de la existencia de números perfectos impares. Se sabe apena que un número perfecto impar, de existir, debe ser muy grande (más de 300 dı́gitos) y satisfacer simultáneamente varias condiciones complicadas. Conjetura 3.1.15. No existe ningún número perfecto impar. Nuestro próximo resultado es el criterio de Lucas-Lehmer,la base de los algoritmos que prueban para grandes valores de p si 2p − 1 es o no primo: Teorema 3.1.16. Sea S la sucesión definida por S0 = 4, Sk+1 = Sk2 − 2 para todo natural k. Sea n > 2, luego Mn = 2n − 1 es primo si,y sólo si, Sn−2 es múltiplo de Mn . Prueba. Observemos inicialmente que √ )2 n ( √ )2 n ( Sn = 2 + 3 + 2− 3 para todo natural n. La demostración por inducción es simple: claramente √ )20 ( √ )20 ( S0 = 4 = 2 + 3 + 2 − 3 y (( √ )2k ( √ )2k )2 Sk+1 = Sk2 − 2 = 2 + 3 + 2 − 3 −2 (( √ )2k )2 √ )2k ( √ )2k (( √ )2k )2 ( = 2+ 3 +2· 2+ 3 · 2− 3 + 2− 3 −2 √ )2k+1 ( √ )2k+1 ( = 2+ 3 + 2− 3 . ( √ )2n−2 ( √ )2n−2 Supongamos, por el absurdo, que Mn | 2+ 3 + 2− 3 y que Mn sea √ ( )2n−2 ( compuesto, con un factor primo q, tal que q 2 < Mn . Tenemos 2+( 3 + 2− √ )2n−2 [√ ])∗ 3 ≡ 0 (mód q), donde, en el grupo multiplicativo G = Z/(q) 3 , √ )2n−2 √ )2n−2 √ √ )−1 ( ( ( tenemos 2 + 3 = − 2− 3 . Como 2 − 3 = 2 + 3 , esta √ )2n−1 ( ecuación puede ser reescrita como 2 + 3 = −1 (también en G), lo √ que significa que el orden de 2 + 3 en G es exactamente 2n . Esto es un 18 absurdo, pues el número de elementos de G es apenas q 2 − 1 < 2n . Queda, por tanto,demostrado que si Sn−2 es múltiplo de MN , entonces Mn es primo. Supongamos ahora que Mn es primo,con n > 2. Recordemos que n es un ( ) ( ) primo impar. Por reciprocidad cuadrática tenemos M3n = − M3n = −1, pues 3 ≡ Mn ≡ −1 (mód 4) y Mn ≡ 1 (mód 3). Ası́,3 no es un cuadrado en Z/(Mp ) (√ ) ( ) Mn −1 y K = Z/(Mp ) 3 es un cuerpo de orden Mn2 . Además, 3 2 = M3n = −1 √ )2n−2 ( √ )2n−2 ( en K. Queremos probar que 2 + 3 + 2− 3 ≡ 0 (mód M )p ,es ( decir,que es igual a 0 en K. Esto equivale a demostrar que tenemos 2 + √ )2n−2 ( √ )2n−2 ( √ )2n−1 = − 2− 3 en K, lo que puede ser reescrito como 2+ 3 = 3 √ n −1;debemos por tanto probar que el orden de 2 + 3 es exactamente 2 . Note ( √ )2n ( √ )Mn ( √ ) ( √ )( √ ) que 2n = Mn +1 donde 2+ 3 = 2+ 3 2+ 3 = 2− 3 2+ 3 = √ ) Mn ( M √ ) Mn √ √ ( Mn −1 1 (note que, en K, 2 + 3 = 2 N+ 3 = 2 + 3 2 · 3 = 2 − 3); √ ası́ es claro que el orden de 2 + 3 es un divisor de 2n . Como K ∗ tiene Mn2 − 1 = 2n+1 (2n+1 − 1) elementos, debemos probar que √ ( √ )2 n 2+ 3 no es una cuarta potencia en K. Note que 2+ 3 = 1 demuestra que √ 2 + 3 es un cuadrado,lo que de hecho puede ser visto en forma más directa: √ √ )2 ( 2 2 + 3 = 1 + 3 /2 y 2 = 2n+1 = 2(n+1) es una cuarta potencia en K. Nos √ ) ( resta, ası́, demostrar que ± 1 + 3 no son cuadrados en K. Supongamos, por √ ) ( √ )2 √ ) ( ( el absurdo, que ε 1 + 3 = a + b 3 , con ε = ±1; tenemos ε 1 − 3 = √ )2 ( ( )2 a − b 3 y, multiplicando, −2 = a2 − 3b2 , lo que significa que −2 es un cuadrado módulo Mn (pues a y b son enteros). Esto, en tanto, es claramente ( −2 ) ( −1 )( 2 ) falso: M = Mn Mn = −1 · 1 = −1, pues Mn ≡ 3 (mód 4) y ya vimos que n 2 es un cuadrado módulo Mp . Esto concluye la demostración. Aún cuando Mp no es primo, podemos garantizar que sus factores primos serán de ciertas formas especiales. Esto es muy útil cuando buscamos primos de Mersenne pues podemos eliminar algunos exponentes encontrando factores primos de Mp . Esto también puede ser útil para hacer conjeturas sobre la “probabilidad”de que Mp sea primo, o, más precisamente, sobre ladistribución de los primos de Mersenne. Proposición 3.1.17. Sean p > 2 y q primos con q un divisor de Mp . Luego, q ≡ 1 (mód p) y q ≡ ±1 (mód 8). Prueba. Si q divide Mp , entonces 2p ≡ 1 (mód q), lo que significa que el orden de 2 módulo q es p (pues p es primo). Esto significa que p es un divisor 19 )2 ( de q − 1, o sea, que q ≡ 1 (mód p). Por otra parte, 2 ≡ 2p+1 = 2(p+1)/2 ( ) (mód q), donde 2q = 1, lo que significa que q ≡ ±1 (mód 8). Los varios valores de p para los cuales la primalidad de Mp fue probada sugieren que para la amplia mayorı́a de los valores de p, Mp no es primo. Esto es apenas una conjetura: no se sabe demostrar incluso que existen infinitos primos p para los cuales Mp sea compuesto. Ahora vamos aver una proposición que sirve para garantizar que para ciertos valores especiales de p, algunos muy grandes, Mp no es primo. Proposición 3.1.18. Sea p primo, p ≡ 3 (mód 4). Luego 2p + 1 es primo si, y sólo si, 2p + 1 divide Mp . ( ) Prueba. Si q es primo, entonces Mp = 2p − 1 = 2(q−1)/2 − 1 ≡ 2q − 1 ( ) (mód q). Mas p ≡ 3 (mód 4) significa que q ≡ 7 (mód 8), donde 2q = 1. Ası́, Mp ≡ 0 (mód q), lo que demuestra una de las implicaciones de la proposición. Por otra parte, si 2p + 1 no es primo, tiene factores primos r, con r ̸ equiv1 (mód p) ( pues r < p ). Si 2p + 1 dividiese Mp , r serı́a un factor primo de Mp , lo que contradice la proposición anterior. Los primos p para los cuales 2p + 1 es primo son llamados primos de Sophie Germain. Algunos primos de Sophie Germain bastante grandes son conocidos, como p0 = 18458709 · 232611 − 1; ası́, por la proposición anterior, Mp0 es compuesto. Se sabe también que si πSG (x) denota el número de primos de Sophie Germain menores que x, entonces existe C tal que para todo x πSG (x) < C x . (log x)2 πSG (x) sea asintótico a cx/(log x)2 para algún c > 0 pero no se ha podido demostrar que que existen infinitos primos de Sophie Germain. 3.2. Nociones sobre la hipótesis de Riemann Definición 3.2.1 (Función de Euler). Se define la función π : R → N, ∑ x 7→ π(x) = 1, donde el ı́ndice p varı́a sólo en los números primos. p≤x 20 x π(x)/ lnx x 105 1.104 7 10 1.071 109 1.054 1011 1.043 1013 1.036 1016 1.028 1021 1.021 1024 1.019 Tabla 3.1: Aproximaciones de π(x) La función π cuenta los números primos menores a x, por ejemplo π(20) = 8, π(100) = 25. En 1792 Gauss mostró evidencias numéricas de ésta relación π(x) =1 x→∞ x/ ln(x) lı́m conocida como el Teorema de los Números Primos (TNP). Veamos algunos cálculos en el cuadro 3.1. De manera independiente, Legendre muestra que la funcin π puede aproximarse mediante una de la forma x 7→ x/(A log x + B), y da como valores A = 1, B = −1.08366; y en el ao 1852 Chebyshev demostró que 0.92129 lnxx < π(x) < 1.1056 lnxx , más rigurosamente, puesto con notación moderna, demostró que π(x) = Ω(x/ ln x), es decir, que el cociente (π(x) ln x)/x, está acotado tanto inferior como superiormente. En 1892 Sylvester mejora la aproximación: 0.95695 lnxx < π(x) < 1.04423 lnxx . En 1896 J. Hadamard y De la Valle-Poussin, independientemente, dieron demostraciones del TNP. Se ha considerado a Euler como quien introdujo la famosa función ∞ ∑ 1 x 7→ ζ(s) = ns n=1 21 que es convergente para cualquier real s > 1. Y, él mismo demostró la relación ∏ ζ(s) = (1 − p−s )−1 . p primo llamada producto de Euler, la cual apareció por primera vez en su libro “Introduction in Analysis Infinitorum”. De hecho ya eran conocidos casos particulares de esta función en términos de ∑ 1 series, por ejemplo, para s = 1 resulta la series armónica ∞ n=1 n , que ya desde 1350 N. d’Oresme habı́a demostrado que era divergente. ∑ π2 1 En 1735, Euler muestra que ζ(2) = ∞ n=1 n2 = 6 , ζ(4) = π4 , 90 y trabajó los casos pares llegando a calcular hasta ζ(26). Actualmente se sabe que para valores enteros pares tenemos la relación, ζ(2k) = 22k−1 π 2k (−1)k+1 B2k , (2k)! donde B2k es llamado un Número de Bernoulli. Lamentablemente, Euler no obtuvo nada acerca de los casos impares, actualmente se sabe que ζ(3) es un número irracional . Una consecuencia importante de la función ζ es otra demostración de la existencia de una infinidad de números primos. En efecto, esto es una consecuencia de que ζ(s) → ∞, cuando s → 1. En 1859 Riemann edita un manuscrito titulado “Sobre el número de primos menores que una magnitud dada”, en el que Riemann estudia la relación de los números primos con funciones de variable compleja. Riemann tuvo la idea de extender la función zeta a todo el plano complejo (privado del punto z = 1) e intentó probar el TNP mediante esa extensión. Aunque no demostró el TNP, s le permitió obtener muy buenos resultados. Riemann formuló también varias conjeturas sobre la extensión de la función ζ (llamada desde entonces la función de Riemann). Sin embargo el punto más importante de la discusión, está en la distribución de los ceros de la función de Riemann, que está ı́ntimamente relacionada con la distribución de los números primos. Se tiene los siguientes resultados acerca de la función de Riemann: 1. ζ no tiene ceros en el semiplano Re(z) > 1. 2. ζ no tiene ceros en la lı́nea Re(z) = 1. Este hecho implica en TNP. 22 Grfica 3.1: Raı́ces, o ceros reales de ζ. Por lo tanto las únicas tres posibilidades respecto a los ceros de ζ son las siguientes: 1. Los ceros que están fuera de la franja o < Re(z) < 1 son enteros negativos pares reales, es decir −2, −4, −6, −8, . . .. Estos son los únicos ceros fuera de la franja citada y son llamados ceros triviales de ζ, o ceros reales, ya que ningún otro cero es real. Que éstos sean ceros resulta, por un lado, al expresar la función [ ] de Riemann en Bn+1 términos de los números de Bernoulli ζ(−n) = − n+1 , y también de la forma equivalente demostrada por Euler ( ) ∞ n ∑ 1 1 ∑ k n ζ(z) = (−1) (k + 1)−z 1−z n+1 1−2 2 k n=0 k=0 En la gráfica 3.1 se muestra el eje real negativo, donde se puede observar los ceros triviales de ζ. 2. Los ceros que están en la franja 0 < Re(z) < 1 son llamados ceros notriviales de ζ y hay una cantidad infinita de ellos. Los ceros no-triviales no son reales por lo que son llamados también ceros complejos. 3. Los ceros que han podido ser calculados están sobre la lı́nea crı́tica Re(z) = 1/2, y tienen la forma 1/2 + yi con y ̸= 0. En la tabla 3.2 la ordenadas de los primeros ceros que se conocen quedan enlistadas, y en la gráfica 3.2 se les puede observar, al graficar la función real y 7→ |ζ(1/2 + yi)|. 23 y : ζ(1/2 + yi) = 0 14.134725142 40.918719012 21.022039639 43.327073281 25.010857580 48.005150881 30.424876126 49.773832478 32.935061588 52.970321478 37.586178159 56.446247697 Tabla 3.2: Las ordenadas de los primeros ceros no-triviales de ζ Grfica 3.2: Ceros de la función real y 7→ |ζ(1/2 + yi)|. 24 ao n 1903 15 1914 79 1925 138 1935 1, 041 1958 35, 337 1966 250, 000 1968 3, 500, 000 1977 40, 000, 000 1979 81, 000, 001 1983 300, 000, 001 1986 1, 500, 000, 001 2001 10, 000, 000, 000 2004 900, 000, 000, 000 2004 10, 000, 000, 000, 000 Tabla 3.3: Número de ceros no-triviales de ζ conocidos en las fechas indicadas. Riemann formula entonces su conjetura acerca de los ceros no triviales: Conjetura 3.2.2 (Hipótesis de Riemann (HR)). Todos los ceros no triviales de ζ que están dentro de la franja ya mencionada están en la lı́nea crı́tica Re(z) = 1/2. Hasta la fecha nadie ha podido demostrar que la conjetura de Riemann sea verdadera, o por el contrario, ha podido dar un contraejemplo. Este es uno de los problemas no-resueltos más importantes de las matemáticas modernas. Lo que se tiene es sólo evidencia numérica de que la conjetura es cierta, en los aproximadamente 1013 primeros ceros. La cantidad de ceros calculados hasta la fecha los podemos ver en la tabla 3.3 De todo esto resulta, entonces, una ı́ntima relación entre los números primos y la función ζ. De manera visual es posible captar esa relación. En las gráficas 3.3 y 3.4 mostramos patrones de números primos y de ceros de zeta. Tomamos muestras de 50 primos y de 50 ceros de ζ, éstos de alguna forma aleatoria. 25 Grfica 3.3: Distribución de primos. Grfica 3.4: Distribución de ceros de ζ Se observa que el comportamiento en su distribución es “parecida” y casi no cambia. Esto puede verse mejor al tomar una mayor cantidad de muestras. Tal relación se puede establecer de manera formal en la siguiente versión de la HR. Definición 3.2.3. La integral logarı́tmica Li(x) está definida por ∫ x dt Li(x) = 2 log t Entonces se puede reescribir la hipótesis de Riemann como: π(x) = Li(x) + O(x1/2+ϵ ) Otras dos maneras equivalentes de la hipótesis de Riemann se plantean como sigue: Definición 3.2.4. Sean ψ y ϑ definidas como: ∑ x 7→ ψ(x) = {log p|k ∈ N, p primo, pk ≤ x} = log mcm{i|1 ≤ i ≤ ⌊x⌋} ∑ x 7→ ϑ(x) = log p p≤x 26 Entonces la hipótesis de Riemann queda como: ψ(x) = x + O(x1/2+ϵ ) ϑ(x) = x + O(x1/2+ϵ ) Aplicación del teorema del número primo Una aplicación simple del TNP la vemos en criptografı́a de la siguiente manera: En la práctica son muy comunes los certificados digitales. Un cer- tificado digital consiste esencialmente de una clave pública, de los datos del propietario del certificado y de una una firma digital de quien emite el certificado. La clave pública en un certificado RSA es un número entero producto de dos números primos, casi del mismo tamaño. Una de las preocupaciones más populares es saber con certeza si acaso los números primos que componen la clave pública no podrán repetirse. Más aún, se trata de saber si hay suficientes números primos para una cantidad considerable de certificados digitales, o alternativamente si acaso es posible siempre encontrar números primos. La respuesta positiva a esto se implica si es posible contar los números primos y saber de qué manera están distribuidos. Es entonces que el TNP puede resolver claramente estas dudas. Primero, si se quiere primos de 512 bits, entonces éstos pueden buscarse en el intervalo [2508 , 2509 ]. El TNP garantiza que en ese intervalo se puede encontrar aproximadamente π(2509 ) − π(2508 ) primos, es decir alrededor de 2509 2508 − = (4.75034 − 2.37984) · 10150 ln(2509 ) ln(2508 ) = 2.37049 · 10150 . Si hubiese alrededor de 1080 moléculas en todo el Universo, y mucho menos de 1010 individuos en el mundo, no es difı́cil darse cuenta que “nunca” se terminarn los primos a ser usados como certificados digitales. Por otra parte, el TNP implica que dado un número x, entonces tenemos x/(ln x) números primos menores a x, ası́ el “y” donde “aparece” el siguiente número primo, se sigue de que ln(x) ∼ ln(y), y de la relación y/(ln y) = x/(ln x) + 1. 27 Esto quiere decir que si tenemos algún primo de algún p, el siguiente “aparecerá” en una distancia aproximada de ln(p). En nuestro caso, sólo tendremos que recorrer alrededor de ln(2509 ) ∼ 352 enteros, a partir de algún número aleatorio para encontrar un número primo. Por lo que las dudas referentes a los números primos en certificados digitales estn resueltas en la práctica. 3.3. Nociones sobre la hipótesis extendida de Riemann De manera análoga a que la hipótesis de Riemann, en la versión extendida existen varias maneras de escribirla, veamos algunas de ellas. La función Lp : C → C se define como: ∞ ( ) ∑ n 1 Lp (z) = p nz n=1 ( ) donde n p es el llamado sı́mbolo de Legendre. Entonces la Hipótesis Extendida de Riemann (HER) se plantea como: todos los ceros no-triviales de z 7→ Lp (z) tienen parte real 1/2. Por otra parte, intuitivamente podemos observar que los números primos están “igualmente” distribuidos en diferentes clases de residuos módulo un número n. Por ejemplo, entre los 1229 primos menores a 10000, 611 son congruentes con 1 y 617 lo son con 2, módulo 3. Es bien conocido el siguiente resultado acerca de los residuos de primos módulo un número n. Teorema 3.3.1 (Dirichlet). Si mcd(a, n) = 1 entonces hay una cantidad infinita de nmeros primos congruentes con a módulo n. Una manera más concreta de este teorema se tiene en la siguiente definición. Observamos primero que si los números primos estuviesen equi-distribuidos en las clases de congruencia módulo n, entonces debe haber un “mismo” número de primos en cada una de las que contengan primos. Como hay φ(n) de tales clases (φ denota a la función clásica de Euler, que cuenta para cada entero n, cuántos enteros menores y primos relativos a n hay), por el TNP 28 “deberı́a” haber alrededor de x/(φ(n) ln x) primos en cada una de tales clases de congruencia. Con lo cual queda motivada la siguiente Para tres enteros positivos x, a, n con a < n, sea Π(x, na) el conjunto de primos congruentes con a módulo n que son menores a x. Sea, ahora, π : (x, n, a) 7→ π(x, n, a) = card(Π(x, n, a)) Por ejemplo π(10000, 3, 1) = 611, π(10000, 3, 2) = 617. La HER también puede ser planteada de manera equivalente si tomamos dos enteros n y a primos relativos y ϵ > 0. Entonces se ha de tener, π(x, n, a) = Li(x) + O(x1/2+ϵ ). ϕ(n) Finalmente, una última versión de HER la escribiremos después de la siguiente definición. Un carácter sobre un grupo abeliano G es un homomorfismo de G al cı́rculo unitario S 1 = {z ∈ C|z z̄ = 1} (este último dotado de la multiplicación de números complejos). Sea µ un carácter sobre Z∗n , entonces se define el carácter de Dirichlet χ : Z∗ → S 1 como: { µ(m mod n) si mcd(m, n) = 1 χ(m) = 0 en otro caso Si χ asume slo valores 0 o 1, se dice ser principal. La función de Dirichlet L es entonces z 7→ L(z, χ) = ∑ χ(n) n≥1 nz . La HER afirma que todos los ceros de L tienen parte real 1/2. Hipótesis de Riemann Generalizada y primalidad La función zeta de Riemann ζ para los números complejos s con Re(s) > 1. Se prueba que es holomorfa en el semiplano Re(s) > 1 y que se puede extender en una función meromorfa en el plano complejo C. La hipótesis de Riemann es que en la banda 0 < Re(s) < 1 todos los ceros de ζ están en la recta Re(s) = 12 . Dado un homomorfismo P del grupo multiplicativo (Z/mZ)∗ en C∗ , podemos 29 extender ζ a un homomorfismo del semigrupo multiplicativo χ : N → C∗ (χ se llama un carácter módulo m). A partir de χ se define su L-serie de Dirichlet mediante L(z, χ) = ∑ χ(n) n≥1 nz La hipótesis de Riemann generalizada (HRG) dice que para todo módulo m y todo carácter χ, los ceros en la banda 0 < Re(s) < 1 de la función L están sobre la recta Re(s) = 21 . 3.4. Curvas Elı́pticas Una curva elı́ptica E sobre un cuerpo K es el conjunto de puntos (x, y) ∈ K que son solución de una ecuación de la forma y 2 = x3 + Ax + B, donde A, B son constantes. Esta ecuación es llamada ecuación de Weierstrass para la curva elı́ptica E. K habitualmente es el cuerpo de los números racionales Q, los números reales R, los números complejos C, un cuerpo finito Fp para un primo p, o Fq donde q = pk con k ≥ 1, etc. Si A, B son elementos del cuerpo K diremos que la curva elı́ptica E está definida sobre K. Si queremos considerar puntos con coordenadas en algún cuerpo L extensión de K, escribimos E(L). Por razones técnicas, es útil agregar a una curva elı́ptica un punto más que denotaremos por O y llamaremos punto del infinito, ubicado al “tope” (y al “fondo”) del eje y , es decir E(L) := {(x, y) ∈ L × L : y 2 = x3 + Ax + B} ∪ {O}. En términos de gráficos, E(R) tiene dos formas básicas: la cúbica y 2 = x3 − x que tiene tres raı́ces reales distintas, y la cúbica y 2 = x3 + x que tiene sólo una raı́z real. Asumiremos además, 4A3 + 27B 2 ̸= 0. razón por la cual no existirán raı́ces multiples. 30 pues, si r1 , r2 , r3 son las raı́ces de la cúbica, se demuestra que el discriminante de la cúbica △ := [(r1 − r2 )(r1 − r3 )(r2 − r3 )]2 es △ = −(4A3 + 27B 2 ). Por lo tanto, las raı́ces de la cúbica deben ser distintas. La condición 4A3 + 27B 2 ̸= 0 garantiza que la curva elı́ptica sea regular, es decir, sin vértices ni autointersecciones. Si 4A3 + 27B 2 > 0 la curva tiene una única componente conexa y si 4A3 +27B 2 < 0 tendrá dos componentes conexas. Consideraremos también ecuaciones algo más generales, como y 2 + a1 xy + a3 y = x3 + a2 x2 + a4 x + a6 , (3.1) donde a1 , a2 , a3 , a4 , a6 ∈ K. Esta es llamada ecuación de Weierstrass generalizada y es útil cuando trabajamos sobre cuerpos de caracterı́stica 2 y caracterı́stica 3. Si la caracterı́stica del cuerpo no es 2, podemos dividir por 2, completar cuadrados y obtener: ) ( 2 ( ) ( ( a 1 x a 3 )2 a3 a1 a3 ) a21 2 3 y+ + x + a4 + x+ + a6 , = x + a2 + 2 2 4 2 4 que podemos escribir como Y 2 = x3 + a′2 x2 + a′4 x + a′6 , donde Y = y + a1 x 2 + a3 2 y con algunas constantes a′2 , a′4 , a′6 en K. Si además la caracterı́stica del cuerpo es diferente de 3, podemos hacer x = X− a′2 3 y obtener Y 2 = X 3 + AX + B, para algunas constantes A, B en K. Por otro lado, supongamos que comenzamos con una ecuación cy 2 = dx3 + ax + b con c y d no nulos. Multiplicando ambos lados de la ecuación por c3 d2 obtenemos (c2 dy)2 = (cdx)3 + (ac2 d)(cdx) + (bc3 d2 ), y con el cambio de variables Y = c2 dy y X = cdx obtenemos de nuevo, una ecuación en la forma de Weierstrass. 31 Suma de puntos en una curva elı́ptica Las curvas elı́pticas definen de manera natural una operación llamada suma, con la cual se obtiene un grupo abeliano sobre el conjunto de sus puntos; y es a partir de esta suma, que quedará definido el múltiplo de un punto, que es la suma del punto consigo mismo, un número determinado de veces. Veamos como se define dicha suma. Sea E una curva elı́ptica con ecuación y 2 = x3 +Ax+B y sean P1 , P2 puntos en E tales que P1 = (x1 , y1 ) y P2 = (x2 , y2 ). Definiremos un nuevo punto P3 : Sea la recta L que pasa por P1 y P2 , y veremos más adelante que L intersecta a E en un tercer punto P3′ , reflejamos P3′ con respecto del eje x y obtenemos P3 ; luego definimos P1 + P2 = P3 . Consideremos primero que P1 ̸= P2 y que ambos son distintos de O. La recta L a través de P1 y P2 tiene pendiente igual a m= y2 − y1 . x2 − x1 Si x1 ̸= x2 . La ecuación de L es y = m(x − x1 ) + y1 . Para encontrar la intersección con E, sustituı́mos para obtener [m(x − x1 ) + y1 ]2 = x3 + Ax + B. Esto se puede escribir de la forma x3 − m2 x2 + ax + b = 0 Las tres raı́ces de esta cúbica corresponden a los tres puntos de intersección de L con E, pero en este caso ya conocemos dos raı́ces x1 y x2 , pues P1 y P2 son puntos de E y L. Por lo tanto si P3′ = (x′3 , y3′ ), obtenemos x′3 = m2 − x1 − x2 y y3′ = m(x′3 − x1 ) + y1 . 32 Ahora, reflejamos con respecto al eje x para obtener el punto P3 = (x3 , y3 ) donde x3 = m 2 − x1 − x2 y y3 = m(x1 − x3 ) − y1 . En el caso que x1 = x2 , pero y1 ̸= y2 , la recta a través de P1 y P2 es vertical, y por lo tanto intersecta a E en O. Reflejando O con respecto al eje x obtenemos el mismo punto O (es por esto que ponemos O al tope y al fondo del eje y). Por lo tanto, en este caso P1 + P2 = O. Ahora consideremos el caso P1 = P2 = (x1 , y1 ). Cuando los dos puntos coinciden tomamos la recta L a través de ellos como la recta tangente, y la diferenciación implı́cita nos permite encontrar la pendiente m de esta recta m= 3x21 + A 2y1 si y1 ̸= 0 (cuando y1 = 0, la recta es vertical y hacemos P1 + P2 = O, como antes). Por lo tanto, asumiendo que y1 ̸= 0, la ecuación de L es y = m(x − x1 ) + y1 , y como antes obtenemos la ecuación cúbica x3 − m2 x2 + αx + β = 0. Esta vez, conocemos sólo una raı́z x1 , pero es una raı́z doble pues L es tangente a E en P1 . Por lo tanto, procediendo como antes obtenemos que x3 = m2 − 2x1 , y3 = m(x1 − x3 ) − y1 . Finalmente, supongamos que P2 = O. La recta a través de P1 y O es una recta vertical que intersecta a E en el punto P1′ que es el reflejo de P1 con respecto al eje x. Cuando reflejamos P1′ con respecto al eje x para obtener P3 = P1 + P2 , regresamos a P1 . Por lo tanto, P1 + O = P1 para todo punto P1 ∈ E. En resumen tenemos 33 Suma de puntos Sea E una curva elı́ptica sobre un cuerpo K definida por y 2 = x3 + Ax + B. Sean P1 = (x1 , y1 ) y P2 = (x2 , y2 ) puntos en E con P1 ̸= O y P2 ̸= O. Tenemos que P1 + P2 = P3 = (x3 , y3 ) es como sigue: i) Si x1 ̸= x2 , entonces x3 = m2 − x1 − x2 , y3 = m(x1 − x3 ) − y1 , donde m = y2 − y1 . x2 − x1 ii) Si x1 = x2 pero y1 ̸= y2 , entonces P1 + P2 = O. iii) Si P1 = P2 y y1 ̸= 0, entonces x3 = m2 − 2x1 , y3 = m(x1 − x3 ) − y1 , donde m = 3x21 + A . 2y1 iv) Si P1 = P2 y y1 = 0, entonces P1 + P2 = O. Además, definimos P +O =P para todo P en E. Cuando P1 y P2 tienen coordenadas en un cuerpo L extensión de K, entonces P1 + P2 también tiene coordenadas en L. Por lo tanto E(L) es cerrado bajo la suma de puntos que acabamos de definir. Teorema 3.4.1. La suma de puntos en una curva elı́ptica E, satisface las siguientes propiedades: 1. Conmutativa P1 + P2 = P2 + P1 para todo P1 , P2 ∈ E. 2. Existencia del neutro P +O =P para todo P ∈ E. 3. Existencia de inverso Dado P ∈ E, existe P ′ ∈ E tal que P + P ′ = O. 4. Asociativa (P1 + P2 ) + P3 = P1 + (P2 + P3 ) para todo P1 , P2 , P3 ∈ E. 34 En otras palabras, los puntos de E forman un grupo abeliano aditivo con O como elemento neutro. Prueba. La conmutatividad es obvia, del hecho de que la recta a través de P1 y P2 es la misma que la recta a través de P2 y P1 . La propiedad de existencia del elemento neutro O, se cumple por definición. Por otro lado si P esta en E y P ′ es el reflejo de P con respecto al eje x, entonces P + P ′ = O. La asociatividad es la propiedad más sutil y menos obvia de la suma de puntos de E, [6] muestra los detalles de la prueba de esta propiedad. Observación: En la ecuación de Weierstrass, si P = (x, y), entonces −P = (x, −y). Para la ecuación generalizada (3.1), si P = (x, y) está en la curva descrita por (3.1), se prueba que −P = (x, −a1 x − a3 − y). Conjetura 3.4.2. En la curva y 2 = x3 − 25x, ( tenemos 2(−4, 6) = (−4, 6) + (−4, 6) = 1681 62279 ,− 144 1728 ) . También tenemos (0, 0) + (−5, 0) = (5, 0), 2(0, 0) = 2(−5, 0) = 2(5, 0) = 0. NOTA: Multiplicación Puntual Si P es un punto de una curva elı́ptica E, y k es un entero , entonces kP denota P + P + · · · + P (con k sumandos, k > 0). Si k < 0, entonces kP = (−P ) + (−P ) + · · · + (−P ), con |k| sumandos. Para calcular la multiplicación puntual kP , cuando k es un entero muy grande, es más rápido y eficiente usar el método de las duplicaciones sucesivas. Por ejemplo, para calcular 40P , calculamos 2P, 4P = 2P + 2P, 8P = 4P + 4P, 16P = 8P + 8P, 32P = 16P + 16P y por último 40p = 32p + 8p. Este método nos permite calcular kP para k grande, más rápidamente. La dificultad es que el tamaño de las coordenadas de los puntos se incrementan 35 velozmente si trabajamos por ejemplo sobre los números racionales. Sin embargo, cuando trabajamos sobre un cuerpo finito, por ejemplo Fp , este no es un problema, porque podemos reducir módulo p continuamente y por tanto los números implicados son relativamente pequeños. La asociatividad nos permite hacer estos cálculos sin preocuparnos del orden de los sumandos. Este método se puede implementar mediante el siguiente algoritmo. Algoritmo para calcular [k]P Sea k un entero positivo y sea P un punto en una curva elı́ptica E. La siguiente secuencia genera, el punto kP . 1. Iniciamos con: a = k, B = 0 y C = P . 2. Si a es par, sea a = a/2, y sean B = B, C = 2C. 3. Si a es impar, sea a = a − 1, y sean B = B + C, C = C. 4. Si a ̸= 0, ir al paso 2. 5. Salida B. El valor en la salida de B, es kP . 36 Capı́tulo 4 Materı́ales y Métodos Materı́ales Este trabajo no está sujeto a experimentos de laboratorio, sin embargo se ha desarrollado sobre la base de textos, papers, artı́culos, software especializado experiencias propias y la combinación apropiada de técnicas del algebra, análisis, teorı́a de números, que han permitido un adecuado desarrollo de este trabajo. Se ha hecho uso de material de tipo técnico en el diseño e impresión de los informes trimestrales y el informe final. Toda la información ha sido procesada en una computadora personal usando un procesador cientı́fico LATEXy un visor Adobe Acrobat para pdf, en concordancia con las directivas vigentes, mediante el cual se han editado todo el formulismo matemático. Métodos Realizada la elección de la bibliografı́a y la recolección de información, los métodos usados en el desarrollo de los temas en cada capı́tulo, que han permitido el avance y la exposición clara del trabajo de investigación son : Método Deductivo, que se caracteriza por por ser conciso y lógico lo que ha permitido desarrollar la teorı́a de curvas elı́pticas de una forma concreta y ordenada. Método inductivo-deductivo que ha permitido el desarrollodel formulı́smo que describe los conceptos, ası́ también como el análisis de las soluciones de los algoritmos y los resultados presentados. 37 Capı́tulo 5 Resultados Un test de primalidad es un algoritmo que, dado un número de entrada n, no consigue verificar la hipótesis de un teorema cuya conclusión es que n es compuesto. Es decir, un test de primalidad sólo conjetura que “ante la falta de certificación sobre la hipótesis de que n es compuesto podemos tener cierta confianza en que se trata de un número primo”. Esta definición supone un grado menor de confianza que lo que se denomina prueba de primalidad (o test verdadero de primalidad) que ofrece una seguridad matemática. Un algoritmo de prueba de primalidad (o test verdadero de primalidad) es un algoritmo determinı́stico que consiste en que, dado un número de entrada n, verifica la hipótesis de un teorema cuya conclusión es que n es primo. Una prueba de primalidad es la verificacin computacional de dicho teorema. Ası́ pues se puede hablar de dos grados de certidumbre: las pruebas de primalidad (existe certidumbre matemática) y los tests de primalidad (existe certidumbre práctica). Dentro de la teorı́a de algoritmos, es importante medir el costo o el tiempo de ejecución de un algoritmo. Una buena medida del costo de un algoritmo, es la cantidad de operaciones aritméticas elementales que se realizaran al ejecutarlo; entendiendo por operación aritmética elemental como una operación efectuada sobre los dı́gitos, sea adición, sustracción, multiplicación, división o cálculo de resı́duo. Estaremos pensando en términos de dı́gitos binarios o bits. Por ejemplo, si queremos sumar dos números enteros x, y consideremos sus 38 representaciones binarias k = (km−1 , · · · , k1 , k0 )2 y r = (rm−1 , · · · , r1 , r0 )2 donde los valores de ki y los rj son: 0 o 1. Para efectuar la suma del modo usual, comenzaremos calculando k0 + r0 . Si éste número es menor que 2 entonces s0 = k0 +r0 es el dı́gito de las unidades de k + r. Pero si k0 + r0 = 2 entonces s0 = 0 y llevo 1(reserva); hasta aquı́ hemos realizado una operación aritmética elemental. Procediendo de la misma forma, para k1 + r1 tendremos que hacer una o dos operaciones elementales, dependiendo si la reserva es nula o no lo es. Procediendo de manera anĺoga, el número total de operaciones aritméticas elementales depende de las reservas no nulas que aparezcan a lo largo de la cuenta, que a lo más será 2m; y esto varı́a de un número a otro. Es importante remarcar que también que hay muchas otras operaciones que la computadora tiene que realizar para efectuar la suma, que no estamos considerando como operaciones aritméticas elementales, que el afectan el tiempo de ejecución de un algoritmo. Para la multiplicación de dos números enteros, necesitamos multiplicar r por cada bit de k y después sumar los resultados, como estamos multiplicando números en base 2, no habrá reserva en los productos. Ası́, para multiplicar r por los ki no necesitamos más de m operaciones aritméticas elementales, correspondientes a los productos de los ki por los bits de r. Luego para calcular el producto de r por cada uno de los bits de k, tendremos que realizar como máximo, k 2 operaciones aritméticas elementales. Para calcular kr debemos sumar los productos de r por bits de k, considerando el orden de magnitud de cada bit. El número de sumas realizadas en cada columna no puede exceder a 2m, inclusive tomando en cuenta las reservas; como tenemos m columnas podemos sumar todos estos números a un costo de 2k 2 de sumas elementales. Luego para calcular kr no necesitamos más de 2k 2 operaciones aritméticas elementales. Un método, para resolver primalidad, es eficaz, si requiere un tiempo polinómico respecto a la cantidad de dı́gitos; en este caso se desea tener un algoritmo que decida en un tiempo proporcional a logk n(O(logk n)), si n es un número primo o compuesto. 39 5.1. Algoritmo de primalidad de Agrawal, Kayal y Saxena Estudiaremos un algoritmo polinomial determinista para certificar que un número es primo, descubierto por tres investigados del Tecnológico de Madras, en Kanpur, la India: Manindra Agrawal, Neeraj Kayal y Nitin Saxena, dado a conocer en agosto del 2002, como AKS que resuelve un problema de la Teorı́a de Números que estuvo abierto por milenios, y también un problema de la complejidad computacional; pero lo más impactante es la simplicidad de su procedimiento, pues la mayorı́a de técnicas matemáticas usadas en el algoritmo y en sus demostraciones eran conocidas en siglo IXX; excepto la noción de costo de un algoritmo(que se dió a finales del siglo XX) y un resultado sobre la distrubución de primos en intervalos( en 1985). Este algoritmo posee una complejidad de O((log n)12 ). La intensión de este trabajo es describir este algoritmo de manera que sea accesible, con todos sus detalles. Este algoritmo está basado en una generalización de el pequeño teorema de Fermat a polinomios, que afirma que si a y n son números coprimos, siendo n número primo, entonces se cumple la congruencia (x + a)n ≡ xn + a (mod n.) Es decir, si se eleva el polinomio x + a a la potencia n, entonces el residuo de dicha división es xn + a. Más aún, si se cumple esta congruencia entonces n debe ser un número primo. Sin embargo, el cálculo de (x + a)n requiere más tiempo que la Criba de Eratóstenes. En su lugar se utiliza la congruencia (x + a)n ≡ xn + a (mod xr − 1, n) Es decir, la equivalencia entre los residuos de los polinomios(x+a)n y xn +a después de haber sido divididos por xr − 1 y a su vez cada coeficiente por n, es decir que (x + a)n = xn + a en el anillo Zn [x]/(xr − 1) 40 Algunos números compuestos n satisfacen esta congruencia, pero si se elige r de manera adecuada y se cumple la congruencia para varios valores de a, entonces n debe ser o un número primo o al menos una potencia de un primo. El orden de un número a módulo n se denota por on (a) y representa el valor de k más pequeño para el cual ak ≡ 1 (mod n). El algoritmo AKS selecciona el valor r como el más pequeño que cumple or (n) > log22 (n). Además de esto el algoritmo también requiere conocer la función de Euler y el máximo común divisor. La correción del algoritmo está garantizada por un teorema que inicialmente fue demostrado por los autores y posteriormente resumido por Lenstra,Junior y Bernstein. Es decir, dicho teorema afirma que si n, r, v son enteros positivos, y si S es un conjunto finito de enteros, entonces n es una potencia de un número primo bajo ciertas condiciones que veremos mas adelante. Idea del algoritmo El siguiente teorema es una generalización del TPF y puede tomarse como un criterio determinista. Teorema 5.1.1. Sea n ≥ 2 y a < n un entero tal que mcd(m; a) = 1. Entonces n es primo ⇔ (x + a)n ≡ (xn + a) mód n. Sin embargo, para números considerablemente grandes,el criterio dado por este teorema no es eficiente, ya que requiere evaluar O(n) coefientes. Ası́, la idea básica de AKS fue reducir el número necesario de pasos para la verificación de la primalidad. La aportación de AKS es verificar sólo (x + a)n ≡ (xn + a) mód (xr − 1, n) para potencias r ”pequeñas”, donde mód (xr − 1, n) significa evaluar los polinomios en el anillo cociente Zn [x]/(xr − 1). 41 Resulta que todos los números primos cumplen este criterio, sin embargo también algunos números compuestos lo cumplen para pocas parejas (a; r), por lo que hay que descartar esos casos. El algoritmo elige primero ( en los pasos del 3 al 10) una potencia r adecuada, es decir, tal que sea un número primo 1 y r − 1 tenga un factor q de valor alrededor de r 2 . Se puede probar que tales potencias r existen. Finalmente el algoritmo verifica ( los pasos del 11 al 13) que se cumpla la igualdad mód (xr − 1, n) √ en el anillo Zn [x]/(xr − 1), para a = 1, · · · 2 rlogn. (x + a)n = xn + a En caso que ası́ suceda, esto es suficiente para declarar que n es primo. Veamos primero paso a paso algunos detalles de implementación del algoritmo. Es importante mencionar que en aplicaciones criptográficas, donde es necesario generar un número primo de cierta longitud, se procede primero a generar un número aleatorio impar n, y este se somete a alguna prueba de primalidad. Si se da como salida compuesto, entonces se intenta con n+2, y seguidamente con n + 4, n + 6, · · · hasta obtener el primo deseado. Se garantiza que esto ha de tener un costo mı́nimo por el TNP. Paso 1 Aquı́ se descarta que el número n sea una potencia b-ésima de un número entero a, es decir, se decide si acaso ”n es una potencia perfecta”. Para encontrar un posible exponente b ≥ 2, se procede a calcular un entero 1 c = ⌊n n ⌋. Entonces resultará que n es una potencia perfecta si y sólo si cb = n. Ası́ pues, el paso 1 se puede verificar con la siguiente rutina: Para b = 2 hasta ⌊logn⌋ hacer 1 si c = n b es un entero, entonces compuesto. Paso 2 En esta etapa del algoritmo se busca un número primo r tal que √ r − 1 tenga un factor q ≥ 4 rlogn tal que q|or (n), donde or (n) denota al orden de n módulo r. Este número r se busca de manera exhaustiva, es decir, se comienza desde r = 2 y se detiene hasta que se encuentra el deseado. La 42 existencia del número r está garantizada por un resultado debido a E. Fouvry en 1985. El segundo propósito de esta etapa es detectar si acaso n tiene factores pequeños. Paso 3 Aquı́ simplemente se inicializa r = 2. Realmente debe de iniciarse con r = 3 para verificar sólo los números impares. Se continúa en la búsqueda de r en tanto r < n. Paso 4 Si mcd(n; r) ̸= 1, entonces hay un divisor de n. Por lo tanto, el resultado del algoritmo ha de ser compuesto. Paso 5 Sólo se pasa al siguiente paso si r es primo,lo que se puede verificar mediante el ensayo de divisiones. Realmente se verifica sólo a aquellos r impares; esto es, el incremento del paso 9 debe ser +2. Aquı́ se localiza el factor primo q más grande de r − 1. Mediante Paso 6 búsqueda exhaustiva, se en- cuentra el factor impar más grande de r − 1. Se puede realizar esta búsqueda mediante el siguiente seudocódigo: For i = 2 to r − 1 do While (r mód i) = 0 do r := r/i; output as a factor i Paso 7 √ Se verifica si acaso q ≥ 4 rlogn y si q divide al orden de n módulo r, mediante la prueba n r−1 q 1 modr.Como q es primo y un factor de r − 1, entonces si q no fuese un factor de or (n) tendrı́amos que (r − 1)/q = or (n)k. Por lo tanto n r−1 q ≡ 1 modr. Es decir or (n)|r − 1, pero or (n)|(r − 1)/q, por lo cual or (n)q|or (n). Paso 8 Es importante notar que es necesario que n posea un tamaño al menos de 15 bits para poder encontrar el número r buscado. Paso 9 Si r no es primo, se continúa buscando. La actualización deberı́a de ser r := r + 2 que es el siguiente número impar. Paso 10 Se termina la búsqueda de r. Esto queda garantizado por el resultado de Fouvry. En la última etapa del algoritmo, se revisa si acaso √ (x − a)n ≡ (xn − a) mod(n, xr − 1) para a = 1, · · · , 2 r log n. Si no se cumpliera para algún a, entonces n ha de ser compuesto. 43 De lo contrario n, será un número primo. Paso 11 Se recorren los números a que verifican si acaso n satisface todas las congruencias. En tal caso, n es primo. Paso 12 Si se encuentra a tal que (x − a)n ̸≡ (xn − a) mod(xr − 1, n) entonces n es compuesto. Paso 13 Si, finalmente, n cumple todas las equivalencias del paso 12, con el r encontrado, entonces n es primo. Luego con el aporte de H. Lenstra, los mismos autores publican una nueva versión del algoritmo AKS, que tiene también tres etapas, la primera revisa si n es una potencia perfecta. Los métodos aquı́ conocidos pueden perfeccionarse hasta lograr un tiempo lineal. La segunda etapa consiste de nuevo en buscar un r adecuado y también eliminar la posibilidad de que n tenga factores pequeños. Finalmente la última √ etapa consiste en probar para a = 1 hasta ⌊2 φ(r) log n⌋ que se cumpla (x + a)n ≡ (xn + a) mód (xr − 1, n). En tal caso, se declara que n es primo. Una vez más el esfuerzo mayor se hace en evaluar (x + a)n mod(xr − 1) y particularmente, como se observa en el paso 5 del algoritmo anterior, si n fuese primo es necesario evaluar todos los valores de a, posibles. El resultado de AKS fue escrito más formalmente por D. Bernstein y se resume en el siguiente teorema: Teorema 5.1.2. (Agrawal, Kayal, Saxena) Sea n un entero positivo, sean q, r dos números primos y sea S un conjunto finito de enteros. Suponiendo que : 1. q divide r − 1, 2. n (r−1) q mod r ̸∈ {0, 1}, 3. mcd(n, b − b′ ) = 1 para todos los elementos diferentes b, b′ ∈ S, √ ( ) 2 ⌊r⌋ 4. ♯S+q−1 , ≥ n ♯S 5. (x + b)n = xn + b en el anillo Zn [x] , (xr −1) entonces, n es una potencia de un primo. 44 para todo b ∈ S A propuesta de H. Lenstra, el resultado queda reformulado de la siguiente manera: Teorema 5.1.3. (Agrawal, Kayal, Saxena, Lenstra) Sea n, r dos enteros positivos y sea S un conjunto finito de enteros. Suponiendo que : 1. n es una raı́z primitiva módulo r, 2. mcd(n, b − b′ ) = 1 para todos los elementos diferentes b, b′ ∈ S, √ ) ( 2 ⌊r⌋ 3. ♯S+q−1 ≥ n , ♯S 4. (x + b)n = xn + b en el anillo Zn [x] , (xr −1) para todo b ∈ S entonces, n es una potencia de un primo. Para mostrar que el algoritmo es correcto hay que verificar dos cosas: primero, si n es primo entonces el algoritmo debe dar como salida primo, pero esto es claro , ya que n no es una potencia perfecta ni posee factores pequeños ni satisface el teorema AKS. La parte más difı́cil es demostrar que si el algoritmo produce como salida primo, entonces en efecto n es primo; para ésto se se construye de manera conveniente un grupo cı́clico G a partir de los elementos r, q dados por el algoritmo. G es un subgrupo del grupo multiplicativo (Fp [x]/h(x))∗ , siendo h(x) un polinomio irreducible. Entonces se ha de mostrar que n es una potencia del primo p o bien tiene factores pequeños; pero como esta posibilidad ha sido descartada previamente se debe tener que n es primo. Los resultados obtenidos en esta investigación son los siguientes Determinar la primalidad de números enteros es de vigencia actual, este problema ha sido abordado con métodos de algebra básica y se han obtenido resultados satisfactorios; también ha sido abordado con teorı́as no tan básicas como la teorı́a de curvas elı́pticas obteniendo también optimos resultados. El algoritmo AKS está basado en teorı́a sencilla, lo que lo hace manejable y accesible por la gran mayoria y aunque en su forma original no es muy 45 práctico, pues requiere mucho tiempo de ejecución O(logn10.5 ); con las mejoras, ajustes y contribuciones de Lenstra, Berstein y Berizbetia se tiene que el algotritmo tiene un tiempo promedio de O(logn6 ), lo que lo hace eficiente; más aún se considera que se podrı́a mejorar y alcanzar un perfeccionamiento de O(logn3 ). El algoritmo de curvas elı́pticas, es más preciso que el algoritmo AKS, pero usa una teorı́a basada en algoritmos para determinar el números de puntos de curvas elı́pticas, en generar curvas de deterninado orden especı́fico que sea apropiado al problema a tratar, que no es tarea nada fácil y es también de investigación actual, lo que lo hace poco accesible y poco manejable por las mayorı́as. Comparando los métodos AKS con el metodo de curvas elı́pticas,ambos tiene susventajas y sus desventajas; y para optimizar los resultados serı́a apropiado combinar los dos métodos para hacer más eficiente los resultados. 5.2. El algoritmo de primalidad con curvas elı́pticas El Test de la curva elı́ptica decubierto en la década de 1990 se basa en el hecho de que una curva eı́ptica plana no singular, descrita por una ecuación de tercer grado es tal que, es posible definir una adición en el conjunto de puntos de la curva, la cual determina sobre sobre la curva una estructura de grupo abeliano. Tratando de mejorar los algoritmos clásicos y obtener optimas pruebas de primalidad se ha trabajado con la factorización de formas polinómicas de n. Entre estos algoritmos destacan el algoritmo debido a Adleman, Pomerance y Rumely (APR) y la versión mejorada que sobre éste hicieron Cohen y Lenstra (APR-CL) obtiene complejidades casi polinomiales. Desde 1886 Goldwasser, Kilian y Atkin empezaron a trabajar en curvas elı́ptica módulo n, y fue este último quien definió el método ECPP o prueba de primalidad por curva elı́ptica (Elliptic Curve Primality Proving), que tiene 46 diversas implementaciones y se ha probado que es de orden polinomial para casi todas las entradas. El algoritmo de Goldwasser-Kilian (GK) Teorema 5.2.1. Sea N un entro coprimo con 6, E una curva elı́ptica sobre Z/N Z y un punto P sobre E. Consideremos además m, s dos enteros tales que s|m. Para cada divisor primo q de s tenemos (m/q)P = (xq : yq : zq ). Si mP = O y M CD(zq , N ) = 1 para todo q, entonces: Si p es un divisor primo de N entonces ♯E(Z/pZ) ≡ 0 mód s √ Más aún, si s > ( 4 n + 1)2 entonces N es primo. Prueba. Sea p un factor primo de N ; los cálculos sobre la curva cuando es reducida modulo p, implica que s divide al orden de P sobre E(Fp ). Más √ √ aún, si s > ( 4 n + 1)2 , entonces tenemos que ♯(E(Fp ) > ( 4 n + 1)2 ; por el √ teorema de Hasse tenemos que ♯(E(Fp ) < ( p + 1)2 . Luego tenemos que 1 1 1 p 2 > n 4 , ası́ p > n 2 . Como n tiene todos sus factores primos mayores que su raiz cuadrada, entonces N debe ser primo. Esto concluye la prueba. Este teorema nos permite obtener un algoritmo para probar que un entero n, el cual ya se conoce que es un “ probablemente primo”, es definitivamente un primo. Combinando este teorema con el algoritmo de Schoof que nos permite calcular ♯E(Z/pZ) en tiempo O((logp)8+ϵ ), ( esto lo podemos encontrar en [17]) obtenemos el algoritmo de Goldwasser -Kilian. Algoritmo de Goldwasser-Kilian: Sobre la base de este último teorema, Goldwasser y Kilian presentaron un test algorı́tmico de primalidad con complejidad de tiempo polinomial. Dado un entero libre de cuadrados n tal que n > 232 con grandes posibilidades de que es un número primo (en particular con MCD(n,6)=1) y que de preferencia que ya ha pasado por un test de “probablemente primo”), este 47 algoritmo intenta reducir el tema de la primalidad de n a la primalidad de un número más pequeño q. El algoritmo al final saca la siguiente información, según sea el caso : “ n es compuesto”, o “si q es primo entonces n es primo”, donde q es más pequeño que n. 1. Escogemos una curva elptica E sobre Z/N Z, tal que el número de puntos m(calculados con el algoritmo de Schoof) satisfaga que m = 2q, con q un primo probable(entero que ha pasado todos los pseudo test de primalidad). 2. Si (E, m) satisface las condiciones del teorema con s = m, entonces N es primo, encaso contrario es compuesto. 3. La primalidad de q se prueba de la misma forma. 4. Final. En éste algoritmo, sucesivamente vamos creando curvas y calculamos su cardinal hasta obtener una que realmente nos sirva para realizar el certificado. De hecho, lo que hacemos es buscar una curva especı́fica para el primo dado, es decir, que para cada primo creamos un certificado especı́fico. En el próximo algoritmo se hace justamente lo contrario, creamos una curva con el número de puntos que necesitamos, sin necesidad de realizar prueba y error. En éste algoritmo, debido a la complejidad que supone la aplicaciónn del algoritmo de Schoof para primos grandes, se cambia esa técnica por las propiedades derivadas de la multiplicación compleja en las curvas elı́pticas. Este método es muy utilizado actualmente. Algoritmo de primalidad con curvas elı́pticas (ECPP) Procedimiento (N es un probable primo) 1. Sea i := 0, N0 := N , 2. si Ni > N 48 a) hallar un discriminante fundamental −Di que sea bueno para Ni , √ en otras palabras Ni = πi πi′ en K = Q( −Di ); b) si uno de los números m1 , ..., mw es probablemente factorizado, ir al paso 2.c, caso contrario al paso 2.a; c) si guardamos {i, Ni , Di , mr , Fi } donde mr = F iN i + 1 donde Fi puede ser factorizado completamenbte y Ni+1 es probablemente primo; sea i := i + 1 y luego ir al paso 2.a; d ) calcular una raiz j del polinimio HDi (X) ≡ 0 mód Ni ; e) calcular una ecuación de la curva Ei de invariante j y cuyo cardinal modulo Ni es Mi ; f ) hallar un punto Pi de la curva Ei ; g) verificar las condiciones del teorema con s = Ni+1 y m = mi , es decir verificar que Qi = Fi Pi ̸= OEi pero sQi = OEi 3. Terminar. 49 Capı́tulo 6 Discusión El problema de primalidad ha sido tratado con teorı́as complicadas, tales como curvas elı́pticas; por lo que ha sido una gran sorpresa para muchos, que con métodos de teorı́a de números básica se tenga una solución satisfactoria a este famoso problema. En el caso de AKS, el primer ajuste lo hizo Lenstra, como ya se mencionó y fue publicado por los mismos autores mejorando el tiempo a O(logn6.5 ); posteriormente se dan otros perfeccionamientos, algunos presentados por D.Berstein , particularmente con el cálculo mejorado de (x + a)n en el anillo Zn [x]/(x − 1)r . Otra propuesta más fue hecha por P. Berrizbeitia y consiste en la comprobación de la igualdad (x+a)n = (xn +a) mód (xr −1) por la de (mx+1)n = (1+mxn ) mód (x2 − a), para valores s, m adecuados. Esto reduce el número de evaluan ciones polinomiales, lo cual, naturalmente es lo más deseado. La modificación da como resultado primos n ≡ ±1 mód 4. Por otra parte, se han comparado los métodos AKS con el que utiliza curvas elı́pticas, y se ha propuesto combinar los dos métodos para hacer más eficiente la búsqueda. Finalmente, los autores del algoritmo AKS preveén que si se resuelven algunas pequeñas conjeturas, AKS puede alcanzar un perfeccionamiento O(logn3 ),lo que serı́a una muy buena noticia, ya que los tiempos aceptables son O(logn4 ), pero por el momento debemos conformarnos con un algoritmo de tiempo promedio O(logn6 ). 50 Capı́tulo 7 Referencias Bibliográficas 51 Bibliografı́a [1] Crandal,R.-Pomerance,C. PRIME NUMBERS, A COMPUTATIONAL PERSPECTIVE, New York :Springer,2 Edic. 2005. [2] Silverman, J.H. THE ARITMETIC OF ELLIPTIC CURVES, New York: Springer-Verlag,1986. [3] Agrawal, M. , Kayal, N. y Saxena, N. PRIMES IS IN P, Annal of Mathematics(Ann. of Math.)., 2004 vol. 160, pp. 781-793. [4] Koblitz, N. A COURSE IN NUMBER THEORY AND CRIPTOGRAPHY,new York: Springer-Verlag,1994. [5] Knap,Anthony W. ELLIPTIC CURVES, London: Princeton University Press,1 Edic. 1992. [6] Cohen, H., A COURSE IN COMPUTATIONAL ALGEBRAIC NUMBER THEORY. Berlin: Springer, Primera Edicin, 1993. [7] Knuth, D. , THE ART OF COMPUTER PROGRAMMING., New York: Addison-Wesley Publishing Co., 2nd edition, 1980. [8] Rabin, M.,PROBABILISTIC ALGORITHMS FOR TESTING PRIMALITY. Journal Number Theory, 1980 vol. 12, pp. 128-138. [9] Joye, M. y Paillier, P., FAST GENERATION OF PRIME NUMBERS ON PORTABLE DEVICES: AN UPDATE. Lecture Notes in Comput. Sci., 2006, vol. 4249, pp.160-173. [10] Berrizbeitia, P., SHARPENING PRIMES IS IN P FOR A LARGE FAMILY OF NUMBERS, Math. Comp., 2005, vol. 74, pp. 2043-2059. 51 [11] Del Valle, Jose C., EL SECRETO DE LOS NÚMEROS PRIMOS., España: Editorial Club Universitario, 1ra edicin, 2006. [12] Berrizbeitia, Pedro., PRUEBAS DETERMINSTICAS DE PRIMALIDAD. Gaceta Real Ac.Esp. , 2001, Vol. 4, pp. 447-456 . [13] Lenstra,A.K.- Lenstra, H.W, ALGORITHMS IN NUMBER THEORY. Hand book of Theoretical Computer Science,Chapter 12., Elsevier Science Publisher B.V. 1990. [14] Ankeny,C.N., THE LEAST QUADRATIC NON RESIDUE ., Annals of Mathematics, Vol.9. 55ra , N1, Jannuary 1952. [15] Lenstra, H.W., ELLIPTIC CURVES AND NUMBER THEORETIC ALGORITHMS. Tech. Rep. Report 89-19. Math. Inst. Univ., Amsterdam, 1986. [16] Bressou, D.M., FACTORIZATION AND PRIMALITY TESTING, New York: Springer-Verlang,1989. [17] Cohen, H., A COURSE IN COMPUTATIONAL ALGEBRAIC NUMBER THEORY, New York : Springer-Verlag, 1993. 52 Capı́tulo 8 Apendice/Anexos NÚMERO PRIMO DE SOPHIE GERMAIN. Un número primo es un número de Sophie Germain si al multiplicarlo por 2 y sumarle 1 el resultado es también un número primo. Por ejemplo el 2 es número primo de Sophie Germain por ser un número primo y cumplirse 2x2 + 1 = 5 siendo 5 también número primo. NÚMEROS PRIMOS DE SOPHIE GERMAIN, MENORES DE 1000. 2 3 5 11 23 29 41 53 83 89 113 131 173 179 191 233 239 251 281 293 359 419 431 443 491 509 593 641 653 659 683 719 743 761 809 911 953 53 ALGUNOS PRIMOS DE MERSENNE CONOCIDOS Núm. de orden Exponente Año de descubrim. Descubridor 1 2 Anónimo 2 3 Anónimo 5 13 1456 Anónimo 7 19 1588 Cataldi 8 31 1772 Euler 9 61 1883 Pervushin 10 89 1911 Powers 12 127 1876 Lucas 13 521 1952 Robinson 15 1279 1952 Robinson 18 3217 1937 Riesel 20 4423 1961 Hurwitz 23 11213 1963 Gillies 25 21701 1978 Noll y Nickel 27 44497 1979 Nelson y Slowinski 30 132049 1983 Slowinski 31 216091 1985 Slowinski 34 1257787 1996 Slowinski y Gage 36 2976221 1997 GIMPS 37 3021377 1998 GIMPS 38 6972593 1999 GIMPS 39 13466917 2001 GIMPS Esta información ha sido extraı́da de: http://www.mersenne.org/prime.html 54 LOS DIEZ PRIMOS GEMELOS MÁS GRANDES Número Primo Número de dı́gitos Año de descubrimiento 33218925 · 2169690 ± 1 51090 2002 318032361 · 2107001 ± 1 32220 2001 1807318575 · 2 ±1 29603 2001 665551035 · 280025 ± 1 24099 2000 781134345 · 266445 ± 1 20011 2001 1693965 · 266443 ± 1 20008 2000 83475759 · 264955 ± 1 19562 2000 ±1 18098 2001 4648619711505 · 260000 ± 1 18075 2000 2409110779845 · 260000 ± 1 18075 2000 291889803 · 2 98305 60090 Esta información ha sido extraı́da de: http://www.utm.edu/research/primes/index.html 55