87
Universidad de Panamá Facultad de Ciencias Naturales Exactas y Tecnologías Escuela de Matemática Criterios de Primalidad. Presentado por: Fezel Bhana Hafeji Ced: 8-815-486 Dirigido por: Dr. Jaime Gutiérrez Este trabajo es presentado en el Seminario para optar por el Título de Licenciatura en Matemática.

Criterios de Primalidad

  • Upload
    fezal08

  • View
    778

  • Download
    0

Embed Size (px)

DESCRIPTION

Trabajo presentado en el Seminario para optar por el Título de Licenciatura en Matemática.Dirigido por: Dr. Jaime GutiérrezCiudad Universitaria, Octavio Méndez PereiraPanamá, 2010

Citation preview

Page 1: Criterios de Primalidad

Universidad de Panamá

Facultad de Ciencias Naturales Exactas y Tecnologías

Escuela de Matemática

Criterios de Primalidad.

Presentado por:

Fezel Bhana Hafeji

Ced: 8-815-486

Dirigido por:

Dr. Jaime Gutiérrez

Este trabajo es presentado en el

Seminario para optar por el Título de

Licenciatura en Matemática.

Ciudad Universitaria, Octavio Méndez Pereira

Panamá, 2010

Page 2: Criterios de Primalidad

Dedicatoria

A mi padre Aziz Bhana, mi madre Fátima Aziz Bhana, a mis hermanos

Yasin y Sohel Bhana; a toda mi familia y amigos, en especial a mi gran

amiga Zugeily D. Tejeira C.

Page 3: Criterios de Primalidad

Agradecimiento

En primer lugar a mi Dios misericordioso, por darme la oportunidad y conocimiento para llevar a cabo este trabajo; a mis

padres y hermanos; a todos los profesores, en especial al Prof. Dr. Jaime Gutiérrez, por dirigir mí trabajo de seminario; a mis compañeros; y por último, que siempre están presentes, a mis

sinceros y verdaderos amigos.

Gracias…

Page 4: Criterios de Primalidad

Índice

Introducción

Marco Histórico Anteriores a la Antigua Grecia Antigua Grecia Edad Oscura Matemáticas modernas Siglo XIX Siglo XX y la algorítmica moderna.

Marco Teórico

Definición de Divisibilidad La existencia de infinitos números primos Teorema Fundamental de la Aritmética Definición de Primalida Tests de Primalidad (definición). Algoritmos de factorización Los Criterios de Primalidad

ₒ División por Tentativaₒ Criba de Eratosthenesₒ Pequeño teorema de Fermatₒ El método de factorización de Fermatₒ Primos de Mersenne

ₒ Método de factorización de Eulerₒ El teorema de Prothₒ Test de Pépinₒ Test de Wilsonₒ Teorema de Wolstenholmeₒ Test de Lucas

ₒ Test de Pocklington

ₒ Test de Lucas-Lehmerₒ Solovay-Strassen(SS)

ₒ Método de factorización rho de Pollard.ₒ Primalidad y curvas elípticas

Aplicación

Conclusiones

Bibliografía

Page 5: Criterios de Primalidad

Introducción

En este trabajo queremos ilustrar la fascinación por los números primos de matemáticos,

profesionales y aficionados por igual, desde la antigüedad hasta nuestros días.

Explicaremos la evolución de los números primos a lo largo de la historia, como ha

sido el esfuerzo de la humanidad por comprender los números primos que en mi opinión

son un claro ejemplo de la belleza y el encanto de esta ciencia. El estudio de los

números primos ocupa un lugar destacado en la historia de las Matemáticas y muchos

de los grandes matemáticos han ligado su nombre y esfuerzo a ellos. La lista sería

interminable, citemos solo algunos: Euclides, Fermat, Euler, Gauss, etc. Todos ellos y

otros muchos han ido añadiendo piezas al rompecabezas de los números primos.

Hay que destacar una cantidad infinita de primos, y la demostración de este teorema se

remonta sobre el año 300 A.C. por el matemático Euclides y es un buen ejemplo de la

belleza de las Matemáticas. La propiedad más importante de los números primos es que

constituyen las piezas básicas en las que se descompone cualquier número natural. El

Teorema Fundamental de la Aritmética dice que todo numero natural mayor o igual que

2 puede ser expresado, de manera única, como producto de números primos.

Otro aspecto importante es aquel que los hace útiles: la seguridad del comercio por vía

electrónica se confía hoy a códigos construidos usando estos números indivisibles.

Gracias a los números primos y sus propiedades se pueden hacer conexiones seguras

por canales inseguros, acreditar identidades, etc. Por tanto interesan a informáticos e

ingenieros y al mundo gubernamental y empresarial.

Mi objetivo principal en este trabajo ha sido en presentar los criterios de primalida,

realizando un recorrido a través de la historia de la Matemática, además enlistaremos

estos criterios.

Comenzaremos con los distintos algoritmos usados para comprobar la primalidad.

Empezaremos por los algoritmos griegos y árabes.

Page 6: Criterios de Primalidad

Seguidamente trataremos los certificados de primalidad y composición clásicos, como

por ejemplo, el test de Willson nos ilustra un algoritmo que a primera vista parece

eficiente, pero del que actualmente no se sabe si lo es o no.

Más adelante, en el siglo XX y la algorítmica moderna. Entre los más importante se

encuentra el algoritmo de Solovay-Strassen. También podemos destacar el algoritmo de

Miller-Rabin, hoy por hoy, uno de los mejores y más rápido test de primalidad.

Posteriormente nos meteremos con los test en la clase RP basados en curvas elípticas.

Hablamos del ECPP y del APRCL. Para finalizar este apartado introduciremos el

reciente test AKS. Para terminar, comentaremos las implicaciones que trae el algoritmo

en sí mismo, sobre todo lo referente a la seguridad informática, criptografía y el

criptosistema RSA.

Page 7: Criterios de Primalidad
Page 8: Criterios de Primalidad
Page 9: Criterios de Primalidad

Uno de los problemas más estudiados en la historia de las matemáticas ha sido el

determinar si un número es primo o compuesto. Dichos estudios y sus propiedades

fueron estudiados de manera exhaustiva por los matemáticos de la antigua Grecia.

Anteriores a la Antigua Grecia:

Paleolítico Superior (33.000 a. C. y el año 9.000 a.c.)

Antes de la Antigua Grecia, se puede resaltar, se cree que el hombre primitivo tenía

conocimiento acerca de los números primos, prueba de estos se encuentra en el hombre

del Paleolítico Superior (33.000 a. C. y el año 9.000 a.c.), gracias a que en 1960 fue

hallado por el arqueólogo Jean de Heinzelin de Braucourt[], las muescas presentes en el

hueso de Ishango y parece aislar cuatro números primos: 11, 13, 17 y 19.

Los Egipcios:

Siglos más tarde en las matemáticas egipcias. Los egipcios sólo operaban con las

llamadas fracciones egipcias, suma de fracciones unitarias, es decir, aquellas cuyo

numerador es 1, como:

12

,13

,14

,15

, …

El cálculo de fracciones requería conocimientos sobre las operaciones, la división de

naturales y la factorización. Es por ello que, en cierta manera, tenían que conocer o

intuir los números primos.

Page 10: Criterios de Primalidad

Antigua Grecia:

Ya en la antigua Grecia aparecen numerosos estudios.

Escuela Pitagórica (500 a. c. a 300 a. c.):

Los números primos y sus propiedades fueron estudiados intensamente por los antiguos

matemáticos griegos, especialmente por la escuela Pitagórica. Pitágoras de Samos es

uno de los personajes más misteriosos de las matemáticas. Estudió las propiedades de

cada número, las relaciones entre ellos y las figuras que forman. Fundó la Hermandad

Pitagórica, una comuna formada con discípulos que debían prestar juramento de no

revelar al mundo exterior ninguno de sus descubrimientos. Esto explica que hoy

dispongamos de tan pocos datos fidedignos sobre sus logros matemáticos.

La doctrina de los pitagóricos tenía esencialmente carácter religioso, fundamentalmente

consistió en que la sustancia de las cosas era el número. Los pitagóricos tuvieron gran

interés por ellos debido a que pensaban que los números gobernaban el mundo y tenían

propiedades místicas y "mágicas". La naturaleza, las estrellas, todo estaba basado en

relaciones numéricas enteras o fraccionarias.

La obsesión por los números y la adoración que les profesaban, condujeron a los

pitagóricos a un estudio minucioso de los números.

De entre la infinidad de números la hermandad se fijó en los que poseen propiedades

especiales y entre ellos se encontraban los números primos, por su naturaleza

indivisible, presentan todas las características para ser "adorados" por los discípulos de

Pitágoras y los números perfectos o divinos. Según Pitágoras, la perfección numérica

dependía de los divisores del número. Es por eso que ellos comprendían la idea de

primalidad.

Page 11: Criterios de Primalidad

Euclides de Alejandría (300 a. C.):

Seguidamente en el año 300 a. C. en que los Elementos Euclidianos aparecieron, ya

habían sido probados varios resultados importantes acerca de números primos. En el

Libro IX de los Elementos, "El Padre de la Geometría" Euclides de Alejandría prueba

que hay infinidad de números primos. Esta es una de las primeras demostraciones

conocidas en la que se utiliza el método del absurdo para establecer el resultado.

Además demuestra el Teorema Fundamental de Aritmética: Todo entero puede ser

escrito como un producto único de primos.

Euclides también demostró que si el número 2n - 1 es primo, entonces el número 2n-1(2n -

1) es un número perfecto. Como aparece en el libro IX, proposición 36 de sus

“Elementos”, Euclides escribe: “Si tantos números como se quiera a partir de una

unidad se disponen en proporción duplicada hasta que su suma total resulte un número

primo, y el total multiplicado por el último produce algún número, el producto será un

número perfecto.”

Notemos que la suma, s = 1 + 2 + 22 + · · · + 2n−1, es igual a 2n-1. Así podemos

establecer este enunciado de la siguiente manera:

Teorema (Euclides). Si 2n-1 es un número primo, entonces (2 n-1) · 2 n -1 es un número

perfecto.

Euclides descubrió la fórmula para obtener números perfectos. Así pues, el número

encerrado entre paréntesis es un primo, el cual es un número muy conocido (más

adelante lo mencionaremos).

Eratóstenes de Cirene 200 a. C.:

Eratóstenes, nació en Cirene, la actual Libia. Estudió en Alejandría y, durante algún

tiempo, en Atenas y fue gran amigo de Arquímedes. En 236 a. c. Ptolomeo Evergetes le

llamó a Egipto para que se hiciera cargo de la Biblioteca de Alejandría, puesto que

ocupó hasta el fin de sus días, ocurrido durante el gobierno de Ptolomeo V Epífanes.

Griego Eratóstenes ideó un algoritmo para calcular números primos llamado el Tamiz

de Eratóstenes. Este fue el primer criterio de primalidad.

Estas son las más importantes contribuciones de Antigua Grecia a los números primos.

Page 12: Criterios de Primalidad

Edad Oscura:

Después de las matemáticas griegas, se da luego un gran vacío en la historia de los

números primos que es usualmente llamado la Edad Oscura.

Matemáticas Modernas:

Como muchas otras aportaciones matemáticas, el problema de la primalidad llegó a la

Europa moderna a través de los árabes, pero no fue hasta muchos siglos después que

aparecieron los primeros registros escritos sobre la primalidad y su solución. Estos

corresponden al matemático italiano Leonardo de Pisa (Fibonacci) quien presentó un

algoritmo muy simple para determinar si un número n dado es primo.

Pietro Cataldi (1603).

En 1603 El primero en utilizar relaciones observadas entre los números para determinar

la primalidad fue el boloñés Pietro Antonio Cataldi con su trabajo sobre los números

perfectos.

Cataldi determinó que si 2n − 1 es primo entonces n ha de ser primo y 2n − 1(2n − 1) ha de

ser perfecto. Este teorema nos introduce una familia de números especialmente

importante para la historia de la primalidad, los llamados números de Mersenne en

honor del filósofo Marin Mersenne (1588-1665), que son números de la forma Mp = 2p −

1 donde p es un número primo.

Cataldi descubrió los factores de todos los números hasta 800 y una tabla de todos los

números primos hasta 750 (hay 132). Cataldi usó su lista de primos para demostrar que

217- 1 = 131071 es primo (ya que 7502 = 562500 > 131071, pudo comprobar con un

tedioso cálculo que 131071 no tenía divisores primos). A partir de ahí, Cataldi ahora

conocía el sexto número perfecto: 216(217 - 1) = 8589869056. Además Cataldi usó

también su lista de números primos para comprobar que 219 - 1 = 524287 era primo (de

nuevo ya que 7502 = 562500 > 524287) y de este modo encontró el séptimo número

perfecto: 218(219 - 1) = 137438691328.

Page 13: Criterios de Primalidad

Cataldi, a pesar de haber descubierto dos números perfectos, también cometió errores.

Escribió en Utriusque Arithmetices que los exponentes p = 2, 3, 5, 7, 13, 17, 19, 23, 29,

31, 37 daban números perfectos 2p-1(2p - 1). Tenía razón para p = 2, 3, 5, 7, 13, 17, 19

para los que tenía una prueba en su tabla de números primos, pero sólo una de sus

cuatro siguientes aserciones 23, 29, 31, 37 es correcta. En 1640 Fermat mostró que

Cataldi se equivocó para n= 23 y 37, 2n-1 no era primo para esos números; más tarde

Euler en 1738 mostró que Cataldi también había errado para n=29, 2n-1 no era primo

para el número anterior. Más tarde el gran Euler mostró la aserción de Cataldi para

n=31 era correctos.

Pierre de Fermat 1640.

Jurista de profesión y enamorado de las Matemáticas, fue un genio de esta ciencia en su

época. Gracias a él se avanzó en multitud de campos pero, como ya se sabe, su mayor

afición fue la teoría de números.

El próximo gran descubrimiento fue realizado por Fermat en los inicios del siglo XVII.

Fermat, trabajaba la mayor parte del tiempo en soledad. Su único contacto con el resto

de la comunidad matemática fue gracias a Marin Mersenne. Cabe destacar también un

breve intercambio de cartas con Blaise Pascal. Tuvo la costumbre de no publicar nada,

sino que anotaba o hacía cálculos en los márgenes de los libros o escribía casualmente

sus descubrimientos en cartas a amigos. Realizó una serie de investigaciones sobre las

propiedades de los números, las cuales nunca quiso publicar.

Tras dar detalles sobre un descubrimiento termina diciendo "lo lamento, pero este

margen es insuficiente para dar los detalles de la demostración". Los resultados de

Fermat fueron conocidos por otros pensadores europeos gracias a Mersenne, que los

reenvió e hizo una amplia distribución.

Fermat, en una carta a Mersenne, es capaz de refutar los casos p = 23 y p = 37 de

Cataldi. Prueba que 223− 1 y 237−1 son compuestos dando sus factorizaciones y el

procedimiento seguido para encontrarlas:

223−1 = 47·178 481, 237−1 = 223·616 318 177.

Page 14: Criterios de Primalidad

Además Fermat es muy conocido en la historia de la matemática por los números que

llevan su nombre (números de Fermat). Fermat conjeturó que todos los números de la

forma Fn=22n

+1 eran números primos, Leonhard Euler demostró en 1732 que eso no

era cierto al obtener para n = 5 un número compuesto:

Fn=(225

+1 )=4294967297 = 641*6700417.

En 1640 Pierre de Fermat estableció (aunque sin demostración) el pequeño teorema de

Fermat, posteriormente demostrado por Leibniz y Euler, usando casos especiales de su

pequeño teorema. Este Teorema de Fermat es la base de otros muchos resultados en la

Teoría de Números y además es la base de métodos de verificación de números primos

que se utilizan aún hoy en ordenadores electrónicos.

Y por último Pierre Fermat ideo un método de factorización, después de la división por

tentativa, es uno de los métodos más antiguo que se conocen, se basa en las diferencias

entre cuadrados y que es especialmente eficaz cuando n es el producto de dos números

primos próximos entre sí.

Marin Mersenne (1644)

Fue un fraile franciscano que pasó la mayor parte de su vida en los monasterios

parisinos.

Paralelamente a Pierre Fermat en el siglo XVII. El monje francés. Mersenne fue lo más

parecido al centro de una red de intercambio de información científica. Tuvo una

nutrida correspondencia con diversos eruditos de Francia, Italia, Inglaterra y Holanda,

tales como Pierre Gassendi, Descartes, Pierre de Fermat, Galileo Galilei, Blaise Pascal,

Giovanni Doni y Constantijn Huygens. Durante la estancia de Descartes en Holanda,

Mersenne fue su principal corresponsal y su intermediario con los sabios de la época.

Este intercambio de correspondencia contribuyó al desarrollo de la teoría de números.

Hoy día, Mersenne es recordado principalmente gracias a los números que llevan su nombre,

los números primos de Mersenne. Entonces Mersenne en 1644, en el prólogo de su libro

Cogitata Physica-Mathematica, escribe que considerando un primo p entre 2 y 257, el

número 2p-1 es primo sólo para los números p siguientes: 2, 3, 5, 7, 13, 17, 19, 31, 67,

127 y 257. Toda la comunidad matemática opinaba que era imposible que Mersenne

Page 15: Criterios de Primalidad

hubiese estudiado tal cantidad de números, pero tampoco había nadie capaz de probar

que su enunciado era incorrecto.

La afirmación estaba tan por encima de las posibilidades de la época que tuvieron que

pasar más de 100 años para que alguien hiciese un avance real en su estudio: finalmente

se logró probar que efectivamente el número 231-1 es un número primo, éste es sólo uno

de la cantidad ingente de resultados matemáticos asociados al nombre del matemático

más prolífico de la historia, el suizo Leonhard Euler.

Desde el punto de vista histórico, es interesante indicar que la prueba de que el número

de Mersenne correspondiente a n=19 es primo fue dada por Cataldi en 1588. El primer

error en la lista de Mersenne fue descubierto en 1876 por Lucas, probando que 2 67 − 1

era compuesto, aunque no halla sus factores. Además prueba que 2127 − 1 es un número

primo.

El procedimiento empleado por Lucas fue posteriormente convertido en algoritmo por

Lehmer en 1930 y en la actualidad es la base de toda búsqueda de primos de Mersenne.

En 1883, el monje ruso Pervushin prueba que 261− 1 era primo, luego Mersenne había

errado con este.Mientras, otros errores de Mersenne siguen apareciendo. En 1911

Powers muestra que Mersenne también había errado con los primos 289−1 y 2107−1, en

1922 Kraitchik prueba que 2257 − 1 no es primo. El estudio del resultado anunciado por

Mersenne no se completó hasta 1947, estableciéndose que la lista correcta es: 2, 3, 5, 7,

13, 17, 19, 31, 61, 89, 107 y 127. Al fi final resultó que Mersenne había puesto dos

números de más y tres de menos en su lista original.

Leonhard Euler:

100 años más tarde. Otro eminente matemático que estuvo interesado en el problema de

la primalidad fue el suizo Leonhard Euler. Euler, se sintió atraído por los resultados de

Fermat.

Encontró un divisor de Fn (contradiciendo pues la conjetura de Fermat sobre la

primalidad de F5 ). Sin embargo, su aportación más importante al problema fue el

Page 16: Criterios de Primalidad

enunciado de un teorema relacionado que establece que todo divisor primo de Fn debe

ser de la forma 2n + 1k + 1 para algúnk∈N .

Además como ya conocemos el teorema de los números perfectos de Euclides. Si

p=2n−1 (2n−1 ) con ( 2n−1 ) primo, entonces p es perfecto.

Euler demostró el recíproco (evidentemente, sólo para perfectos pares), Euler: Un

número par p es perfecto si y solo si p=2n−1 (2n−1 ) con ( 2n−1 ) primo. Con lo que quedó

establecida una correspondencia biunívoca entre los números perfectos pares y los

números de Mersenne primos. Desde entonces se conoce como Teorema de Euclides-

Euler.

Euler también determino un método de factorización, hoy en día se conoce como el

método de Euler, que se basa en la representación de n como suma de dos cuadrados de

dos formas distintas.

John Wilson (1770)

El teorema de Wilson es un resultado de teoría de números relacionado con la

primalidad de un número entero positivo. Wilson fue un matemático que no estuvo a la

altura de las expectativas que originó, cuando antes de su graduación en Cambridge

descubrió el teorema que lleva su nombre. Fue atribuido a John Wilson por su profesor

Edward Waring. Éste último comentó que Wilson había dejado anotado este resultado

en un cuaderno pero que no lo había demostrado. No hay evidencia de que Wilson

hubiese hallado la prueba. El propio Waring tampoco pudo hacerlo y tuvo que ser

Lagrange en 1770 quien dio la primera prueba.

Sucede con frecuencia, en la historia de las matemáticas, que los nombres asignados a

las conjeturas, teoremas y principios olvidan a personajes que tuvieron la idea original o

hicieron una contribución fundamental a los mismos. El Teorema de Wilson, en este

sentido, no es una excepción. Este teorema fue descubierto por un matemático hindú

llamado Bhaskara en el siglo VII, luego explicado por Ibn al-Haytham en el año 1000

DC, el teorema era conocido por Leibniz un siglo antes de nacer Wilson, el inglés

Edward Waring lo planteó por primera vez en una publicación matemática llamada 

Meditationes Algebraicae.

Page 17: Criterios de Primalidad

Joseph Wolstenholme (1862):

Joseph Wolstenholme, como una consecuencia del test de Wilson, nos da una propiedad

que verifican los números primos ≥ 5, y que fue demostrado por wolstenholme.

Los números de Wolstenholme se nombran en honor a Joseph Wolstenholme, quien

demostró el teorema que lleva su nombre, el equivalente a la relación matemática p3 en

1862, siguiendo a Charles Babbage quien demostró la equivalencia para p2 en 1819.

François Éduard Anatole Lucas (1878):

El último de los matemáticos clásicos del que hablaremos que obtuvo notables

resultados sobre la cuestión fue el francés François Éduard Anatole Lucas.

Lucas trabajó sobre los números de Fibonacci y de Mersenne, obtuvo resultados sobre la

divisibilidad de los primeros y determinó una prueba de primalidad para los números de

Mersenne (que aplicó a la comprobación de primalidad de M127)

La prueba de Lucas-Lehmer es una prueba que sirve para determinar si un determinado

número de Mersenne Mp es primo. El test fue desarrollado por Edouard Lucas en 1878 y

subsecuentemente mejorado por Derrick Henry Lehmer en la década de 1930.

Siglo XIX

Durante este siglo se desarrollaron algoritmos para saber si un número es primo o no

factorizando completamente el número siguiente (p+1) o el anterior (p-1). Dentro del

primer caso se encuentra el test de Lucas-Lehmer, desarrollado a partir de 1856. Dentro

del segundo caso se encuentra el test de Pépin para los números de Fermat (1877). El

caso general de test de primalidad cuando el número inmediatamente anterior se

encuentra completamente factorizando se denomina test de Lucas.

Siglo XX y la algorítmica moderna.

Durante este siglo se desarrollan algoritmos eficaces, que contribuyen enormemente a

encontrar los números primos.

Page 18: Criterios de Primalidad

Test de Solovay-Strassen (SS). Este test está basado en el criterio de Euler. Sin

embargo años más tarde aparecería otra caracterización de los números primos que

posibilitaría un test sustancialmente mejor que el de Solovay-Strassen. La idea del test

se la debemos a Miller y la posterior mejora a Rabin (que transformó el algoritmo en

probabilista usando las ideas de Solovay y Strassen).

En 1983, Adleman, Pomerance y Rumely presentan el primer algoritmo determinista.

Este algoritmo es conocido como el método ciclotímico por usar precisamente los

polinomios ciclotímicos,

Hasta agosto del 2002, el mejor algoritmo determinista era el de Adleman, Pomerance y

Rumely con una complejidad superpolinomial y algunas modificaciones debidas a

Mihˇailescu.

El 6 de agosto del 2002 varios medios alrededor del mundo dieron a conocer que tres

investigadores del Tecnológico de Madras, en la India, M. Agrawal, N. Kayal y N.

Sexena encontraron un algoritmo polinomial determinista para certificar que un número

es primo, cuando en efecto lo es.

Además los métodos de factorización son parte de los criterios de primalidad. Podemos

destacar entre los más recientemente, se han elaborado algoritmos basados en una gran

variedad de técnicas, como las fracciones continuas o las curvas elípticas, aunque

algunos son mejoras de métodos anteriores (la criba cuadrática, por ejemplo, se basa en

una mejora del método de Fermat). Otros, como el método rho de Pollard, son

probabilísticos, y no garantizan hallar los divisores de un número compuesto.

Hoy por hoy, el algoritmo determinístico más rápido de uso general es el General

Number Field Sieve.[]

De esta forma damos concluido un breve recorrido en la historia del fascinante mundo

de los números primos. Empapándonos sobre el surgimiento y los algoritmos para la

determinación de los números primos.

Page 19: Criterios de Primalidad
Page 20: Criterios de Primalidad

Antes de enlistar los criterios es importante mencionar, las diversas propiedades

aritméticas de los primos, establecidas por los matemáticos que, fundamentalmente

entre los siglos XVII y XIX, se ocuparon del tema de forma altruista, sin conexión con

las actividades humanas ordinarias, proporcionan como veremos.

Para introducir el concepto de primalidad es necesario, antes, definir previamente el de

divisibilidad:

Definición de Divisibilidad:

Dados dos enteros a, b decimos que a es un divisor de b si existe otro x∈Z tal que

b = a · x. Esta ampliamente generalizada la notación a|b para indicar que a divide b.

Ya estamos en condiciones de definir: primalidad.

En primer lugar observemos que si a es cualquier número entero mayor que 1, entonces

a = a · 1, con 1 ∈ Z, es decir, a es un divisor de a.

a = 1 · a, con a ∈ Z, es decir, 1 es un divisor de a.

Luego todo número entero a > 1 tiene, al menos, dos divisores, el 1 y el propio a.

La existencia de infinitos números primos:

Euclides fue el primer matemático conocido que dio la primera demostración formal

sobre la infinitud de los números primos,  publicada en el libro IX de los Elementos.

Allá por el 300 a.C. en Grecia Euclides publicó la siguiente demostración:

Euclides supuso que había sólo un número finito de números primos.

Sean P1 , P2 , …, Pn todos los números primos donden∈N .

Construyó el siguiente número. Q=( P1 · P2 · ·· · ·Pn )+1

Es obvio que Q es distinto de cero y además Q no es el elemento de {P1 ·P2 ·· · ·· Pn}, es

decir Q no es un número primo, entonces Q es divisible por algún Picon.i ϵ {1 ,…, n }

Page 21: Criterios de Primalidad

Ahora bien:

Q ≡1 mod Pi∀ iϵ {1 , …, n }

Dado que Q no es divisible por ninguno de los primos, es decir no es un número

compuesto, se deduce que Q es un número primo.

Habíamos supuesto que teníamos un número finito, completamente identificado de

números primos y hemos hallado otro número primo distinto.  Entonces se demuestra

que los números primos son infinitos. Si incluimos este nuevo número primo en el

conjunto de números primos podemos construir el siguiente número:

R=( P1 · P2 · ·· · · Pn ·Q )+1

y siguiendo el razonamiento anterior llegaremos a que R es otro número primo y así

queda demostrado la infinitud de los números primos.

Teorema Fundamental de la Aritmética

Cualquier número entero n mayor que 1 puede escribirse de manera única, salvo el

orden, como un producto de números primos.

Demostración:

Sea a un número entero mayor que 1. Probaremos, primero, que a puede escribirse

como un producto de números primos y, posteriormente, veremos que esa

descomposición es, salvo en el orden de los factores, única.

Descomposición.

Si a es primo, consideramos el número como un producto de un sólo factor y el

teorema ésta demostrado.

Si a no es primo, entonces es compuesto, y la proposición que dice: todo número

compuesto posee, al menos, un divisor primo, asegura que tendría, al menos, un

divisor primo.

Page 22: Criterios de Primalidad

Sea p1 el menor divisor primo de a. Entonces existirá un entero a1 tal que a = p1· a1

Si a1 es primo, entonces el teorema está demostrado.

Si a1 no es primo, será compuesto y aplicando de nuevo la proposición anterior

tendría, al menos, un divisor primo.

Sea p2 el menor divisor primo de a1, entonces existirá un entero a2 tal que

a1 = p2 · a2, con a1 > a2

Sustituyendo esta igualdad en la anterior, tendremos que

a= p1 · p2 · a2

Repitiendo el proceso un número finito de veces, obtendremos

a1 > a2 > a3 >… > ak−1

Con

a= p1· p2 · a2 ·…· pk – 1 · ak-1,

Donde ak−1 es primo o es la unidad, entonces tomando ak−1 = pk, si es primo o ak−1 =

1, se sigue que

a = p1 · p2 · p3 ·…· pk−1

Ó

a = p1 · p2 · p3 ·…· pk−1 · pk

y a está escrito como un producto de factores primos.

Page 23: Criterios de Primalidad

Definición de Primalidad:

Definición: Diremos que el número entero p > 1 es un número primo si los únicos

divisores positivos que tiene son 1 y p. Si un número entero no es primo, lo llamaremos

compuesto.

Nota. Obsérvese que de la definición de número primo se sigue que p es primo si, y sólo

si es imposible escribir p = ab con a, b ∈ Z y 1 < a, b < p.

Paradójicamente, la definición en apariencia tan sencilla e intuitiva, sin embargo da

lugar a algunas de las preguntas más difíciles que se ha planteado nuestra inteligencia,

muchas de las cuales aún restan sin resolver. Y es que lo más interesante de los números

primos es que, a priori es una parte de la matemática de la que cualquier persona puede

leer el capítulo introductorio. En cambio, por poco que uno se adentra, rápidamente se

da cuenta de que el problema no es tan sencillo como aparenta y que son necesarias

estructuras muy complejas y un conocimiento muy interdisciplinario para poder avanzar

en su estudio.

Algunas de las preguntas más importantes relativas a la posición de los números primos

dentro de los números naturales son:

¿Cuántos números primos existen?

¿Cómo saber si un número es primo o no?

¿Hay funciones que definan los números primos de forma eficiente?

¿Cómo están distribuidos los números primos dentro de los números naturales?

¿Como factorizar de forma eficiente un número natural cualquiera?

La dificultad de responder a las preguntas expuestas varía mucho de unas a otras. Por

ejemplo hace miles de años que se conoce la respuesta a la primera pregunta, y es que

existen una infinidad de demostraciones sencillas que nos dicen que existen un número

infinito de números primos.

Otras en cambio son tan complicadas que hoy en día aún no se conoce la respuesta,

como por ejemplo las relativas a la factorización de los números primos o a la

obtención de una función eficiente que los defina.

Page 24: Criterios de Primalidad

La cuestión que da razón a éste trabajo es la segunda pregunta, la de discernir entre si un

número dado de Z es primo o no.

Comprobar si un número es compuesto o primo, se puede tratar de varias maneras, una

muy simple es factorizarlo, así con solo mostrar los factores primos, convenceríamos sin

tener que mostrar una teoría compleja o argumentos auxiliares. Otra forma bastante

parecida seria encontrarle un divisor a dicho número, con esto lo demostraríamos de

manera sencilla a cualquier persona. Pero como persuadir a alguien si el numero es

primo,  para esto debemos acudir a teorías auxiliares, que serán simples o complejas

según el nivel de fortaleza de nuestro algoritmo, con las cuales se demuestran

condiciones que debe cumplir un número para ser primo o no, de esta manera las

comprobaríamos y en caso de cumplirse o no, sabríamos que es primo o compuesto

algunas veces con seguridad y otras con una alta probabilidad.

La primera conclusión a la que llega una persona corriente cuando lee el enunciado del

problema que nos ocupa es que, efectivamente, existe un algoritmo, sencillo y fácil de

aplicar, para resolverlo.

TESTS DE PRIMALIDAD

La demanda del mercado de números primos grandes plantea el problema de encontrar

tales números de manera eficiente: por ejemplo, el sistema RSA solo sería factible si la

oferta de los primos p y q necesarios es abundante y barata. Para encontrar un tal primo

puede elegirse n, número impar arbitrario del tamaño requerido y comprobar si es

primo. El problema que resta es: ¿Cómo comprobar si n es primo?

Definición: Un Test de Primalidad es un algoritmo que permite decidir si un número

natural n es primo o compuesto.

Cualquier método de factorización (por ejemplo la división por los números, impares,

menores que √n), constituye un test de primalidad.

Page 25: Criterios de Primalidad

Algoritmos de factorización

Un algoritmo de factorización es un algoritmo que separa uno a uno los factores primos

de un número. Los algoritmos de factorización pueden funcionar también a modo de

tests de primalidad.

Como ya sabemos la definición formal de número primo, además vimos la

demostración de Euclides de Alejandría, quien prueba que hay infinidad de números

primos, aparte demuestra el Teorema Fundamental de Aritmética: Todo entero puede

ser escrito como un producto único de primos. Con esto nos metemos de lleno para

enlistar en un orden cronológico los diferentes Criterios de Primalidad que existen, para

la determinación de los números primos.

Encontraremos dos clases algoritmos para la determinación de los números primos:

Deterministas, los cuales demuestran matemáticamente la naturaleza prima (o

compuesta) de un número,

Probabilísticos, los cuales solo garantizan, con una probabilidad tan alta como se

desee, la primalidad de un número.

De lo anterior podemos concluir, encontraremos dos clases de criterios para la

determinación de los números primos, uno es el test (prueba) determinista y el segundo

test (prueba) probabilístico.

A continuación desarrollaremos los diferentes criterios de primalidad, eso sí en un orden

cronológico, a medida que fueron surgiendo los test de primalidad.

División por Tentativa

La división por tentativa es el algoritmo de factorización de enteros más sencillo y fácil

de entender.

Dado un entero compuesto n (n será el entero a factorizar), la división por tentativa

consiste en intentar dividir n entre todo número primo menor o igual a . Si se

Page 26: Criterios de Primalidad

encuentra un número que es divisor de n, en división entera, ese número es un factor de

n.

Es posible determinar un límite para los factores primos. Supón que P(i) es el i-ésimo

primo, de modo que P(1) = 2, P(2) = 3, etc. Entonces el valor del último número primo

probado como un posible factor de n es P(i) donde P(i + 1)2 > n; la igualdad aquí

querría decir que P(i + 1) es un factor. Aunque todo esto está muy bien, normalmente el

inconveniente de inspeccionar un n concreto para determinar el valor correcto de i es

más costoso que simplemente probar con el único candidato innecesario P(i + 1) que

estaría incluido en la tentativa con todos los P(i) tales que P ( i )<√n .Puede la raíz

cuadrada de n ser entera, entonces es un factor y n es un cuadrado perfecto, pero no es

esta una manera buena de encontrarlos.

La división por tentativa garantiza encontrar un factor de n, puesto que comprueba todos

los factores primos posibles de n. Por tanto, si el algoritmo no encuentra ningún factor,

es una prueba de que n es primo.

Por ejemplo, queremos saber se 323 es un número primo. La raíz cuadrada de 323 es

323½ = 17,9722, por lo tanto, vamos a dividir 323 por 2, 3, 5, 7, 11 y 17. Si ninguno de

estos primos dividir 323, entonces él será primo:

El entero 323 no es primo porque es dividido por 17.

Si estuviéramos buscando por un primo titánico, con más de 10.000 dígitos decimales,

nunca podríamos dividirlo por todos los primos menores que su raíz cuadrada. Aun así,

aún en estos casos la división por tentativa es utilizada, solamente para hacer un rastreo

inicial. Se hace divisiones por algunos millones de primos pequeños y después se aplica

una prueba de primalidad.

En el caso de que n haya 25 dígitos o más, la división por tentativa usando primos

menores que su raíz cuadrada es impracticable. Si n tuviera 200 dígitos, entonces la

división por tentativa es imposible.

Page 27: Criterios de Primalidad

Criba de Eratosthenes

Una vez conocida la existencia de infinitos números primos, se plantea un nuevo

problema cual es la forma en que dichos números están distribuidos en el conjunto de

los números naturales. Este problema es complicado y se conocen sólo resultados

parciales. Un primer método para resolver esta cuestión fue establecido en el 200 a.c.

por el astrónomo Eratostenes de Cirene, el cual ideo un algoritmo para calcular números

primos llamado Criba o Tamiz de Eratostenes y es consecuencia del siguiente teorema

cuya primera demostración rigurosa se debe a Fermat. _

Teorema. Si un número entero mayor que 1 no tiene divisores primos menores o iguales

que su raíz, entonces es primo.

Demostración:

Sea p entero estrictamente mayor que 1. Utilizamos el método de demostración por la

contrarrecíproca, es decir veremos que si p no es primo, entonces existe, al menos, un

divisor primo de p menor o igual que su raíz.

En efecto, si p no es primo, entonces es compuesto y (por la proposición: todo número

compuesto posee, al menos, un divisor primo.) tendrá, al menos, un divisor primo a.

Veamos que es menor o igual que la raíz de p. En efecto,

a|p ⇒ p = aq, con 1< a < p, y q ∈ Z: 1< q < p.

Además, si suponemos que a ≤ q , entonces

a ≤ q ⇒ a2 ≤ aq ⇒ a2 ≤ p ⇒ a ≤√ p.

Así pues, hemos encontrado un divisor primo de p menor o igual que la raíz de p.

Page 28: Criterios de Primalidad

La criba de Eratóstenes es un algoritmo que permite hallar todos los números primos

menores que un número natural dado.

Partimos de una lista de números que van de 2 hasta un determinado número.

Eliminamos de la lista los múltiplos de 2.

Luego tomamos el primer número después del 2 que no fue eliminado y

eliminamos de la lista sus múltiplos, y así sucesivamente.

El proceso termina cuando el cuadrado del mayor número confirmado como

primo es menor que el número final de la lista.

Los números que permanecen en la lista son los primos.

Ejemplo: deseamos calcular los números primos desde el número dos hasta 120.

Aplicando los pasos anteriores obtenemos la lista de los números primos, la cual

aparece en la parte derecha del siguiente cuadro.

Para este algoritmo necesitamos demasiado tiempo y espacio para realizar el algoritmo

con enteros suficientemente grandes. Aún así, este método tan antiguo casi como la

noción de primalidad, es la base para estudios realizados sobre la estimación de la

cantidad (nos referimos a la proporción en relación a los enteros y a su colocación

dentro de ellos) de números primos que existen.

Page 29: Criterios de Primalidad

Además es interesante ya que caracteriza a los primos de forma indirecta, sin recurrir a

la definición. Para él, los números primos son los que restan en la tabla sin ser

eliminados y observemos que para su construcción no necesitamos conocer, a priori,

ninguna propiedad sobre los números primos.

Como ya hemos dicho, todos los resultados de éste trabajo se basan en caracterizaciones

de los números primos que resultan ser ligeramente mejores que su definición para

atacar el problema de la primalidad.

Pequeño teorema de Fermat:

Fermat Alrededor de 1636, Pierre de Fermat enunció el teorema. Aparece en una de sus

cartas a su confidente Frénicle de Bessy, fechada el 18 de octubre de 1640, con el

siguiente texto: Todo número a no divisible por un primo p deja residuo 1 al elevarse a

la potencia p-1 y dividirse entre p.

Si a es un número natural cualquiera, por ejemplo 9 y p un número primo que no es

divisor de a, por ejemplo 5; siempre se cumple que p, es en este caso 5, es divisor

exacto de a p-1 -1, en nuestro caso 95 - 1 - 1.

En efecto 94 - 1 = 6561 - 1 = 6560 que es divisible por 5.

Esta brillante joya numérica se conoce como el "pequeño teorema de Fermat". Y, fue

demostrado por Euler cuando tenía 29 años. En términos de congruencias, esto se

escribe así:

a p−1≡1(mod p)

Otra forma de presentar este teorema es multiplicando por a:

a p≡ a(mod p)

Page 30: Criterios de Primalidad

El método en cuestión es el llamado test de primalidad de Fermat. Dicho test utiliza el

pequeño teorema de Fermat para descartar que cierto número sea primo o para alcanzar

cierta certeza de que un número es primo, según el caso.

Comencemos recordando el pequeño teorema de Fermat (una versión equivalente al

original):

Si P es un número primo, entonces para todo a menor que P, que sea primo relativo con

el propio P se cumple que:

a p−1≡1(mod p)

Es decir, si P es primo entonces a p−1es congruente con 1 módulo P. Esto significa que

si nosotros tenemos un número P que sabemos que es primo y tomamos un número

cualquiera a que no tenga ningún divisor común con P, al dividir el resultado de la

operación a p−1entre P el resto es 1 (o equivalentemente: al dividir a p−1−1entre P el

resto es 0).

Vamos con el primer uso del teorema: si tomamos un número p y otro a primo relativo

con él y el resto de dividir a p−1entre p no es 1, entonces el número p es compuesto. Es

sencillo darse cuenta de esto simplemente tomando el contra recíproco del teorema: si la

congruencia no se cumple, entonces el número n no es primo, por lo que necesariamente

debe ser compuesto.

El segundo uso que se le puede dar a este teorema es el que más nos interesa.

Imaginemos que tomamos un número, por ejemplo p = 11, que en principio no sabemos

si es primo o compuesto. Para aplicar el teorema debemos tomar un número a primo

relativo con 11. Sea, por ejemplo. a = 4 Tenemos que:

a p−1=411−1=104857 6

Si dividimos este número entre 11 el resto es 1. ¿Nos dice algo esto? Pues no mucho:

simplemente que no podemos descartar que 11 sea primo. Si seguimos probando con

todos los primos relativo con 11 menores que el propio 11 obtenemos siempre resto 1 al

realizar las operaciones anteriores. Al pasar con todos, ¿podemos asegurar algo? Pues

Page 31: Criterios de Primalidad

por desgracia tampoco. La razón es muy sencilla: todo número primo p cumple que para

cualquier a primo relativo con él el resto de dividir a p−1entre p es 1 (es lo que dice el

pequeño teorema de Fermat), pero también hay número compuesto que tienen la misma

propiedad. Por ello el hecho de que un número cualquiera pase el test de Fermat no nos

asegura que el propio número sea primo.

Un número que pase el test de Fermat para un cierto a se denomina pseudoprimo en

base a. Por tanto, en el caso anterior al probar con a= 4 tendríamos que 11 es un número

pseudoprimo en base 4. La denominación pseudoprimo se debe a que el número cumple

una propiedad que también cumplen todos los números primos, pero no podemos

asegurar que él también lo sea. De esta forma un número n es llamado un pseudoprimo

de Fermat si es pseudoprimo a toda base 0 < b < n.

Pero continuando con la prueba hemos dicho que 11 pasa el test de Fermat para

cualquier a menor que 11 y primo relativo con él. Aunque se ha comentado que eso no

nos asegura nada, sabíamos de antemano que 11 es primo. Podría ser que los únicos

números que pasan el test de Fermat en cualquier base fueran los números primos, pero

no es así. Existen números compuestos que pasan el test de Fermat para cierta base a,

esos números se le conoce como pseudoprimo de base con el cual pasan el test.

Por ejemplo:

341 = 11 · 31 es pseudoprimo a 2

91 = 7 · 13 es pseudoprimo a 3

217 = 7 · 31 es pseudoprimo a 5

25 = 5 · 5 es pseudoprimo a 7

Los números naturales que pasan el test de Fermat en cualquier base pero resultan ser

compuesto son los denominados números de Carmichael (también se les llama

pseudoprimos absolutos). Es decir, son números p para los cuales sea cual sea a menor

que p y primo relativo con él se verifica qué a p−1≡1(mod p), pero no son primos.

El primer número de Carmichael es el 561. Es decir, a560−1es divisible por 561 para

cualquier a menor que 561y primo relativo con él, pero no es primo. De hecho.

561=3·11·17.

Page 32: Criterios de Primalidad

El método de factorización de Fermat

La cuestión es factorizar un cierto número n. La idea de Fermat es la siguiente:

Si n es igual a la diferencia de dos cuadrados, digamos n=x2− y2, entonces n puede

factorizarse de forma muy sencilla de forma evidente:

n=( x+ y ) ( x− y ) .

Como x2 debe ser mayor que n se tiene que x debe ser mayor que √n. A partir de esto ya

podemos adentrarnos en el método de factorización de Fermat:

Dado un número entero positivo n que queremos factorizar tomamos un entero positivo

x mayor que √n (podemos calcular una aproximación de esa raíz cuadrada a ojo o con el

método normal y después elegir x). Calculamos x2 y le restamos n. Si obtenemos un

cuadrado hemos terminado. Si no es así tomamos x+1, calculamos¿, restamos n y si

hemos obtenido un cuadrado se acaba. Procedemos de la misma forma hasta encontrar

un cuadrado.

Ejemplos de aplicación del método:

Vamos a factorizar el número13837. Su raíz cuadrada está entre 117 y 118. Tomamos x

= 118. Pero 1182 – 13837 = 87, que no es un cuadrado. Tomamos ahora x =119. Ahora

1192 – 13837 = 324 = 182. Por tanto despejando n = 13837 de esta expresión tenemos

su factorización:

13837 = 1192 – 182 = (119 + 18)(119 -18) =137 ·101

Como podemos ver el método está muy bien si la diferencia entre los factores del

número no es muy grande pero no es demasiado eficiente si los dos factores están muy

alejados el uno del otro, ya que en ese caso la cantidad de cálculos que deberíamos

realizar sería enorme.

Page 33: Criterios de Primalidad

Primos de Mersenne

Definición: Un número de Mersenne es un número Mp de la forma,M p=2p−1, cuando p

es primo y Mp también lo es, Mp se denomina primo de Mersenne.

Los primos de Mersenne tienen un origen curioso y están relacionados con los llamados

números perfectos que ya fueron estudiados en la antigua Grecia.

Hasta 1536 se pensó que los números de la forma 2n-1 eran todos primos, pero ese año

Hudalricus Regius, demostró que 211 - 1 = 2047 era el producto de 23 y 89. Sin

embargo, muchos (se supone que infinitos) números primos cumplen esa condición. A

los números primos que cumplen esa condición se les llama números primos de

Mersenne. A pesar de todo, los números de Mersenne han proporcionado

tradicionalmente un método de cálculo de números primos gigantescos.

Existen pruebas especiales de primalidad y búsqueda de factores que los hacen

matemáticamente atractivos. Dos resultados importantes sobre estos números son: la

forma especial que tienen sus divisores y un test rápido (Lucas-Lehmer) para averiguar

si son primos o no.

Ejemplo: M19 = 219 - 1 = 524287 es un primo de Mersenne (encontrado por Cataldi en

1588).

El descubrimiento de los números de Mersenn se debe al grupo GIMPS, concretamente

a Odd Magnar Strindmo, persona que lleva colaborando con GIMPS desde 1996. El

proyecto Great Internet Mersenne Prime Search (GIMPS) ha anunciado el

descubrimiento, no de uno, sino de dos números primos de Mersenne. El método

empleado es el de la computación distribuida en la que muchos voluntarios permiten el

uso de CPU de sus máquinas. No es la primera vez que se descubre un número primo de

este tipo con este método por esta misma organización. El que ahora hace el número 46

es el número primo más grande conocido hasta la fecha. Además se ha confirmado el

Page 34: Criterios de Primalidad

descubrimiento del primo de Mersenne número 47. En concreto es este número:

242.643 .801−1. El número en cuestión tiene la friolera de 12837064 dígitos.

La definición de estos números permite saber que el n-ésimo número de Mersenne es

una cadena de n unos cuando se escribe en binario (base 2). Por ejemplo, M7 = 27 - 1 =

127 = 11111112 es un número de Mersenne. Esta propiedad permite implementar

cálculos con números de Mersenne en los computadores de manera más sencilla. No

todos los primos son primos de Mersenne, pero como éstos se pueden implementar

fácilmente en un programa de ordenador los 8 mayores primos conocidos son de

Mersenne.

Método de factorización de Euler:

La idea de que dos representaciones distintas de un entero positivo dieran lugar a una

factorización fue aparentemente planteada por primera vez por Marin Mersenne. Sin

embargo, no fue hasta Euler, cien años después, que su uso empezara a extenderse. Su

más celebrado uso del método que hoy lleva su nombre fue el de factorizar el número N

= 1000009, que, al parecer, se pensaba que era primo.

Este método de factorización basado en la representación de un entero positivo N como

la suma de dos cuadrados de dos maneras distintas:

N = a2 + b2 = c2 + d2

Aunque la factorización algebraica de números binomiales no sirve para factorizar

sumas de dos cuadrados (en efecto un número que se puede expresar de una forma

como suma de dos cuadrados es un número primo) si se pueden hallar dos

representaciones distintas de un número como suma de dos cuadrados se sigue de ahí

una factorización:

Partiendo de

N = a2 + b2 = c2 + d2

se resta b2 + c2 a ambos lados de la igualdad para crear una diferencia de dos cuadrados:

Page 35: Criterios de Primalidad

a2 − c2 = d2 − b2

y de ahí se sigue que:

(a−c ) · ( a+c )=(d−b ) · (d+b )

Supóngase sin pérdida de generalidad que d y b son ambos pares o bien ambos impares,

de forma que su diferencia es par. Ahora se define una constante k igual al máximo

común divisor de (a − c) y (d − b) de forma que:

(a − c) = kl y (d − b) = km, con mcd(l,m) = 1

de forma que, tras sustituir en la expresión anterior:

l· (a+c )=m· (d+b )

Como l y m son primos entre sí, se sigue que (a + c) es divisible por m, lo que nos da:

(a + c) = mn y;

(d + b) = ln

La factorización del número original n se puede mostrar que es igual a:

N=[( k2 )

2

+( n2 )

2] ·(m2+l2)

Page 36: Criterios de Primalidad

Ejemplo:

Usaremos N = 1000009, como mencionamos anteriormente, se pensaba que era primo,

Euler con el uso de este método comprobó que no era primo.

Como:

N=1000009 = 10002 + 32 = 9722 + 2352

se tiene por las fórmulas anteriores:

a =

1000

a - c = 28 k = 4

b = 3 a + c = 1972 l = 7

c = 972 d - b = 232 m = 58

d = 235 d + b = 238 n = 34

Así,

1000009=[( 42 )

2

+( 342 )

2] ·(582+72)

=(22+172 ) · (582+72 )

= (4+289) · (3364+49)

= 293·3413

Page 37: Criterios de Primalidad

El método de factorización de Euler es más efectivo que el de Fermat para números

naturales cuyos factores no sean próximos entre sí y es potencialmente mucho más

eficiente que la división por tentativa si se pueden hallar representaciones de números

como suma de cuadrados de forma razonablemente fácil. El desarrollo de Euler permitió

una factorización mucho más eficiente, y, para los años 1910, el desarrollo de una tabla

de factores de números hasta 10 millones.

El Teorema de Proth (1878)

Es un test de primalidad para los números de Proth inventado por François Proth

alrededor de 1878.

Un número de Proth es primo, es decir, un número de la forma N=k·2n+1, para k impar,

n un número entero positivo, y 2n >k.

Números primos de Proth satisfacen el teorema de Proth, es decir, un número N de esta

forma es primo si y solo si existe un número a tal que a¿¿es congruente con -1 módulo N

entonces n es un número primo llamado primo de Proth. Este test funciona en la

práctica porque si n es primo, el 50% de los valores de a cumplen con la condición

indicada arriba.

Si a es un número primo y p no es un residuo cuadrático módulo a entonces a tampoco

es residuo cuadrático módulo p y se cumple la condición del teorema. En la práctica se

usan diferentes números primos pequeños para la variable a y se calcula el símbolo de

Jacobi hasta que:

( ap )=−1

lo cual es mucho más rápido que la exponenciación modular para hallar el valor de a, ya

que en este caso, luego de calcular p mod a, se deben realizar unos pocos cálculos

usando números menores que a, mientras que con la congruencia se deben realizar más

de (ln p/ln 2) multiplicaciones modulares modulo p, lo que es muy costoso en tiempo de

cálculo.

Ejemplo: sea N el número de Proth ya que N=13 = 3· 22 + 1.

Page 38: Criterios de Primalidad

Con el uso del teorema tenemos que, tomando a=5, se tiene:

5(13−1)/2=56≡−1(mod 13)

Es decir para n = 13, 56 + 1 = 15626 es divisible por 13, por lo que 13 es primo de proth.

A continuación se muestran ejemplos de uso del teorema de Proth:

Para n = 3, 21 + 1 = 3 es divisible por 3, por lo que 3 es primo.

Para n = 5, 32 + 1 = 10 es divisible por 5, por lo que 5 es primo.

Para n = 9, que no es primo, no existe valor de a tal que a4 + 1 sea divisible por

9.

Los primeros primos de Proth son: 3, 5, 13, 17, 41, 97, 113, 193, 241, 257, 353, 449,

577, 641, 673, 769, 929, 1153,… A julio de 2009, el mayor primo de Proth conocido es

19249 · 213018586 + 1, hallado por el proyecto Seventeen or Bust. Posee 3918990 dígitos

decimales y es el mayor primo conocido que no es de Mersenne.

Test de Pépin

En matemáticas, el test de Pépin (por el matemático francés P. Pépin) es un test de

primalidad que se puede emplear para determinar si un número de Fermat es primo. Es

una variante del test de Proth.

Sea Fn=22n

+1el n-ésimo número de Fermat. El test de Pépin establece que para cada n

> 0, Fn es primo si y sólo si 3¿ ¿ (mod Fn).

Ejemplo: queremos comprobar si F2 es primo, como F2 = 222

+1 = 17. Usando el test de

Pépin tenemos, 3¿ ¿ 38 = 6561

La expresión 3¿ ¿se puede evaluar módulo Fn elevándolo repetidamente al cuadrado. Esto

permite que el test tenga un tiempo de ejecución polinómico, es decir, en principio se

trata de un algoritmo rápido. Sin embargo, los números de Fermat crecen tan

rápidamente que sólo se pueden evaluar unos pocos en un intervalo de tiempo

razonable.

Page 39: Criterios de Primalidad

También pueden emplearse otras bases en lugar de 3, por ejemplo, 5, 6, 7 ó 10.

Test de Wilson:

Teorema de Wilson fue una de las primeras caracterizaciones completas de los números

primos, de forma que no era necesario conocer la factorización del número en cuestión

para obtener un resultado concreto sobre su primalidad.

Test de Wilson: (n − 1)! ≡ −1 (mod n) si y solo si n es primo.

Ejemplo: sea n=7, entonces n-1 = 6 es primo dado que (n-1)! = (6)! ≡ -1 (mod 7)

(El inconveniente es que el cómputo del factorial es un problema computacionalmente

más complejo que la factorización).

Teorema de Wolstenholme

El teorema de Wolstenholme afirma que para un número primo p > 3, la congruencia

(2 p−1p−1 )≡1mod p3

es verdadera, donde la parte izquierda de la igualdad es un coeficiente binomial.

El teorema fue demostrado por Joseph Wolstenholme en 1862; Charles Babbage había

mostrado la equivalencia para p2 en 1819.

No se sabe si un número compuesto cumple el teorema de Wolstenholme. Los números

que cumplen con la congruencia son llamados números de Wolstenholme.

Este teorema puede ser descompuesto en otros dos resultados:

( p−1 )! (1+12+ 1

3+…+ 1

p−1 )≡0 mod p2

y

Page 40: Criterios de Primalidad

( p−1 )!2(1+1

22 +1

32 +…+1

( p−1)2 )≡ 0mod p .

Test de Lucas:

El teorema pequeño de Fermat dice que si p es primo, entonces se cumple que ∀a ϵ Zno

multiplo de p → ap−1≡ 1(mod p). Sabemos ya que el recíproco del teorema no es cierto,

e incluso le hemos dado un nombre a los números enteros que no cumplen la propiedad

reciproca para todos los enteros inferiores que ellos, los números de Carmichel.

Lucas, en 1876 formuló un recíproco del teorema de Fermat, bajo ciertas condiciones.

Proposición: Test de Lucas 1:

Sea N > 1, supongamos que existe un entero n > 1 tal que:

nN−1 ≡1(mod N)

nm≢ 1 (mod N) para todo m = 1, 2, . . . ,N − 2

Entonces N es primo.

Demostración:

De la definición de la función de Euler(Si a y p son dos enteros tales que mcd(a, p)=1,

entonces aΦ(n )≡1 (mod p)) es suficiente ver que Φ (N) = N−1. Para ello simplemente

necesitamos obtener un número entero t tal que: 1 ≤ t < N, Mcd (t, N) = 1 tal que el

orden de t módulo N sea N−1. Estas son precisamente la hipótesis expresada en el

enunciado.

El principal problema de éste test es que requiere de N-2 exponenciaciones modulares

del supuesto número t, operación demasiado costosa, ya que nos proporcionaría un coste

computacional exponencial.

Page 41: Criterios de Primalidad

En 1891, Lucas enunció este otro test:

Proposición. Test de Lucas 2:

Sea N > 1. Supongamos que existe un entero a > 1 tal que:

aN −1 ≡1 (mod N)

am≢ 1 (mod N) para todo m < N tal que m | (N − 1)

Entonces N es primo.

El principal problema asociado a éste test es que es necesario conocer la factorización

en números primos de N − 1 para poder realizarlo, problema, que como ya sabemos, se

conjetura más complejo que el de la primalidad. Solo puede ser utilizado, entonces, en

el caso de tener una caracterización realmente efectiva de los factores que componen N-

1 como puede ser en los primos del tipo,N=2n+1.

El comentario anterior, a propósito del test de Lucas, muestra que, para números

particulares, pueden ser factibles tests deterministas de primalidad eficientes y fáciles de

implementar.

Ejemplo, tómese N = 71. Entonces, N − 1 = 70 = (2)(5)(7). Tómese ahora n = 11. En

primer lugar:

1170 ≡1(mod 71)

Esto nos demuestra que el orden multiplicativo de 11 mod 71 es 70, porque algún factor de 70 aún podría funcionar arriba. Verificamos entonces 70 dividido por sus factores primos: 1135 ≡70 ≢1(mod 71)

1114 ≡54 ≢ 1(mod 71)

Page 42: Criterios de Primalidad

1110 ≡32 ≢1(mod 71)

Entonces, el orden multiplicativo de 11 mod 71 es 70 y de esta manera, 71 es primo.

Test de Pocklington

Enunció la siguiente proposición en 1914:

Proposición Sea N − 1 = qrR dónde q es un número primo, ≥ 1 y q no divide a R.

Supongamos además que existe un entero a > 1 tal que:

aN −1 ≡1 (mod N)

mcd (aN−1

q −1 , N )=1

Entonces todos los factores primos de N son de la forma m · qn+1 con m ≥ 1.

Demostración:

Sea p un factor primo de N y llamemos e al orden de a módulo p. Por consiguiente

sabemos que e divide a p−1. Por la segunda condición expuesta en el enunciado de la

proposición e no puede dividir N−1

q ya que en caso contrario a

N −1q ≡1(mod p) y por

lo tanto qn ⃓e y consiguientemente, como queríamos ver, qn ⃓(q−1).

Esta proposición puede ser interpretada como un test de primalidad en el siguiente

sentido:

Proposición: Test de Pocklington 1.

En las condiciones de la proposición anterior, si todo factor primo p=m· qn+1>√N

entonces N es primo.

Page 43: Criterios de Primalidad

Pocklington, incluso realizó un refinamiento de su caracterización sobre los factores

primos de N − 1 como sigue:

Proposición: Sea N − 1 = FR, dónde mcd(F,R) = 1 y la factorización de F es conocida.

Si para todo primo q que divida a F existe un entero a = a (q) > 1 tal que:

aN −1 ≡1

mcd (aN−1

q −1 , N )=1

entonces todos los factores primos de N son de la forma m·F +1, con m ≥ 1.

Lo que nos lleva a poder formular un test de primalidad análogo al enunciado del test de

Pocklington 1.

A continuación Pocklington propuso otro test de primalidad, refinando los anteriores,

imponiendo ciertas condiciones sobre R, la parte no factorizada de N:

Proposición: Test de Pocklington 2:

Sea N −1 = F·R dónde mcd (F,R) = 1 y la factorización de F es conocida. Supongamos

que B es tal que FB >√ N y que R no tiene más factores primos que los de B, entonces

si:

1. Para cada primo q que divida a F existe un entero a = a(q) > 1 tal que

aN −1 ≡1 (mod N) y mcd (aN−1

q −1 , N )=1.

2. Existe un entero b > 1 tal que bN −1 ≡1 (mod N) y mcd ( bF−1 , N )=1.

Entonces N es primo.

Page 44: Criterios de Primalidad

Ejemplo1: prueba por Pocklington para el número N=11. Se supone conocida la

factorización parcial N-1=2·5 y también conocido el hecho de que F=5 es un número

primo, por tanto q es único e igual a F.

Puesto que 210≡ 1 (mod 11), y

mcd (2105 −1, 11)=1, podemos concluir que n es primo.

Ejemplo 2: prueba por Pocklington para el número N = 11351, N-1 = 2 · 52 · 227

Escogemos A = 227 · 52, con lo que significa B =2. Ahora está claro que mcd (A,B) = 1

y A > √ N

Encontramos un ap para cada factor primo p de A. Esto es tomando

a = 2.

aN −1 ≡211350 ≡1(mod 11351)

mcd ¿

Así cumple las condiciones necesarias. Ahora escogemos a = 7

aN −1 ≡711350≡1(mod 11351)

mcd ¿

Así que funciona para a, por lo tanto N es primo.

El algoritmo es sencillo. Se limita a realizar una serie de cálculos con aritmética

modular y comprobar el resultado. La contrapartida es que se necesita una factorización

parcial de n.

Test de Lucas-Lehmer:

En 1967, Brillhart, Lehmer y Selfridge hicieron más flexibles y potentes los test de las

proposiciones 1 y 2 de Lucas. Enunciaron el siguiente test:

Page 45: Criterios de Primalidad

La teoría para este test fue iniciada por Lucas en 1876 y convertida en algoritmo en

1930 por Lehmer.

Los números de Mersenne son los que tienen la forma: 2n-1. 

Para que un número de Mersenne sea primo, el exponente n debe ser primo.  Lo

contrario no es cierto, para la mayoría de exponentes primos, el número de Mersenne

correspondiente no es primo. En los últimos años los primos de Mersenne se han

buscado utilizando el test de Lucas-Lehmer:

Los números primos más grandes que se han encontrado son primos de Mersenne, esto

es debido a dos motivos:

1.- En notación binaria estos números se representan con una hilera de unos tan larga

como el exponente n, es decir, tienen una estructura muy simple.

2.- El test de Lucas-Lehmer permite certificar rápidamente la primalidad de estos

números.

El test de Lucas-Lehmer dice que para todo p primo impar (es decir, exceptuando el 2),

el número de Mersenne 2p-1 es primo si y solo si el resto de dividir Sp-1 entre 2p-1 es 0, 

donde S1 = 4 y Sn+1 es el resultado de la congruencia (Sn2 - 2) mod (2p-1)

Por ejemplo, sea p = 5.  El número de Mersenne M5 es:  25 -1 = 31

La serie correspondiente es: S1 = 4, S2 = 14, S3 = 194 (mod 31) = 8,  S4 = 62,  resto de

dividir 62 entre 31 = 0, luego 31 es primo.  M5 es primo.

Los tests anteriores tienen una complejidad similar a la de los tests probabilísticos (en

concreto O(log3n)) y han permitido obtener los records, de primos conocidos. Así, el

primo número 38 de Mersenne.

Teorema. Para p un primo impar, el número de Mersenne2p− 1 es primo si y solo si 2p−

1 divide a Sp−1 donde S1 = 4 y Sn+1 = S2n − 2.

Solovay-Strassen(SS):

Otro test muy conocido y utilizado en criptografía es el test de Solovay-Strassen (SS).

Page 46: Criterios de Primalidad

El test de primalidad de Solovay-Strassen, que fue desarrollado por Robert M. Solovay

y Volker Strassen, es un algoritmo aleatorio para determinar si un número es un número

compuesto o es un número primo probable.

Este test está basado en el criterio de Euler que establece que si n es un número primo

impar, entonces a(n−1)/2 ≡( a

n )(mod n) para todos los enteros que satisfacen que el

mcd(a, n)=1, donde( an ) representa el símbolo de Jacobi definido por ( a

n )=∏j=1

k

( ap j

)e j

donde cada pj es un primo distinto, e j ∈N y ( ap j

) es el símbolo de Legendre definido

por

( cp )={

0 si p dividea c ,1 si c esresiduo

cuadraticomodulo p ,

−1de otromodo.

Se puede calcular si se cumple o no la congruencia

a(n−1)/2 ≡( an )(mod n)

para varios valores de a. Si es un número primo, entonces la congruencia es verdad para

todo a. Así, si se eligen valores de a aleatoriamente y se prueba la congruencia,

entonces, tan pronto como se encuentre un a que no cumple la congruencia, se sabe que

no es primero

Los valores de a que cumplen el criterio de Euler se denominan verificadores de Euler

para la primalidad de n y los que no lo cumplen se denominan falsadores de Euler para

la primalidad de n.

Veamos a qué clase de complejidad pertenece:

Page 47: Criterios de Primalidad

Para toda entrada es polinomial en tiempo. Si el valor de entrada es primo entonces

siempre devuelve primo.

Si el valor de entrada es compuesto la probabilidad de darlo por primo es menor que

1/2k, donde k es el número de repeticiones.

Con lo cual concluimos que este algoritmo funciona para decidir si un número es

compuesto o no y es probable que puede dar por primos, números que en realidad son

compuestos.

El mayor problema de este algoritmo radica en la dificultad para implementar el cálculo

del símbolo de Legendre.

Algoritmo Test de Solovay-Strassen.

Este es el primer ejemplo que se propuso de algoritmo probabilista y se puede

considerar a Solovay y Strassen como los padres de dichos algoritmos.

Ejemplo: supongamos que deseamos determinar si n = 221 es primo. Escribimos

(n−1)/2=110. Seleccionamos aleatoriamente un a < n, en este caso a = 47. Calculamos

a(n−1)/2 mod n  =  47110 mod 221  =  −1 mod 221.

( an ) mod n  =  ( 47

221 ) mod 221  =  −1 mod 221.

Esto da que, o bien 221 es primo, o 47 es un falseador de Euler para 221. Tratamos otro

al azar una, eligiendo esta vez a = 2

a(n−1)/2 mod n  =  2110 mod 221  =  30 mod 221

( an )mod n  =  ( 2

221 )mod 221  =  −1 mod 221.

Por lo tanto 2 es un verificador de Euler para la descomposición de 221, y 47 era en

realidad un mentiroso Euler.

Método de factorización rho de Pollard.

Un es algoritmo de factorización para determinar números primos, conocido como

método de factorización de Pollard Monte Carlo.

Page 48: Criterios de Primalidad

En el método de factorización por ensayo y error, probamos con todos los números

entre 2 y √ Npara hallar un factor de N. Si no lo hallamos, N es primo.

En vez de hacer estos ≈ √ N pasos, vamos a escoger una lista aleatoria de números, más

pequeña que √ N , y probar con ellos.

A menudo se construyen sucesiones seudo-aleatorias x0 , x1 , x2 ,…usando una iteración

de la forma x i+1=f (x i) (mod N), con x0 = random(0, N −1). Entonces {x0 , x1 , …}⊆Z N.

Por lo tanto los xi’s se empiezan a repetir en algún momento.

La idea es esta: Supongamos que ya calculamos la sucesión x0 , x1 , x2 ,… y que es

“suficientemente aleatoria”. Si p es un factor primo de N y si

{ x i≡ x j(mod p)xi ≢ x j(mod N )

Test es el Miller-Rabin

La idea del test se la debemos a Miller y la posterior mejora a Rabin (que transformó el

algoritmo en probabilista usando las ideas de Solovay y Strassen).

La idea detrás del algoritmo es la siguiente. Sabemos que si n es primo, Zn es un cuerpo

y por lo tanto x2 −1 tiene exactamente dos raíces, 1 y −1. Sin embargo esto no es cierto

cuando n es compuesto, es más, se puede comprobar que podrá tomar tantos valores

distintos como dos elevado al número de factores primos que posea.

Ahora bien, por el Teorema pequeño de Fermat sabemos que an−1≡1 mod n, con lo cual

an−1

2 es una raíz cuadrada de la unidad y por lo tanto sólo puede ser 1 o −1. Repitiendo el

proceso mientras tengamos factores pares, obtenemos una serie de valores que puede ser

o bien {1, 1,. . ., 1} o bien {1, 1,. . ., −1}. A los números con esta propiedad los

Page 49: Criterios de Primalidad

podemos llamar testigos y se puede probar que más de la mitad de los enteros entre 1 y

n cumplen dicha propiedad. Con lo cual probando con a = 1, 2,. . ., n/2 averiguaríamos

si efectivamente n es primo o compuesto.

A partir de esta idea surge el siguiente algoritmo determinista que certifica primalidad

Test determinista de Miller:

Sea n un entero positivo, tenemos s tal que 1< s < n, si n-1 = 2s·t, con s ≥ 0 y t un entero

positivo impar. Decimos que n pasa el test de Miller en la base b si b t ≡1mod n o bien

que b2j·t ≡−1 mod n para algún j, con 0 ≤ j ≤ s−1

La correctitud de este algoritmo está garantizada por la caracterización dada

anteriormente de los números primos, salvo por el pequeño detalle: sólo comprobamos

los primeros 2 log2(n) números. Esto se debe a que este algoritmo fue diseñado

suponiendo cierta la siguiente conjetura (la cual nos permite acotar la distancia entre

números primos y nos da cierta una idea de su distribución):

Conjetura: (Hipótesis de Riemann).

Definimos ζ(s) =∑n=1

∞1ns con s∈C\ {1} función zeta de Riemann.

∀ s∈C\ {1,-2,-4,…,-2k} tales que ζ(s) =0 ⇒Re (s )=1/2

Volviendo al algoritmo de Miller, la complejidad viene determinada por el bucle

anidado. En el peor caso realizamos en el bucle externo 2 log2(n) operaciones y en cada

una de ellas O(log2(n)) pues s es del orden O(log(n)) y mediante cuadratura iterada se

tarda del orden O(log n) en realizar cada potencia. Obtenemos por tanto un algoritmo de

orden O(log4(n)).

Ahora bien, supongamos que no nos creemos la hipótesis de Riemann, Rabin realizó

una pequeña modificación (usando las ideas de Solovay y Strassen como indicamos

anteriormente) en el algoritmo para convertirlo en probabilista.

Page 50: Criterios de Primalidad

Test es el Miller-Rabin (también conocido como test fuerte del pseudoprimo).

Como ya sabemos, el recíproco del teorema de Fermat no siempre es cierto. De éste

modo se pueden definir los pseudoprimos débiles, como aquellos que fallan para una

base en concreto en el recíproco del teorema de Fermat.

De forma similar, pero con otra congruencia, podemos definir el concepto de

pseudoprimo fuerte.

Test de primalidad que proporciona un algoritmo eficiente probabilístico para

determinar si un número dado es primo. Se basa en las propiedades de pseudoprimos

fuerte.

El test de (MR) es un test de primalidad, es decir, un algoritmo para determinar si un

número dado es primo, similar al test de primalidad de Fermat. Está basado en el

siguiente hecho: Si tenemos un número primo n y n − 1 = 2s r donde r es impar, se

cumple que ∀a∈N /mcd (a , n )=1, entonces o bien ar≡ 1(mod n) o bien

∃ j∈ ¿ (Orden de complejidad O(k × log3 n)).

Supóngase que n > 1 es un número impar del cual queremos saber si es primo o no. Sea

m un valor impar tal que n − 1 = 2k m y a un entero escogido aleatoriamente entre 2 y

n − 2.

Cuando se cumple

am≡ ±1 mod n

o bien

a2r m ≡−1 mod n

para al menos un r entero entre 1 y k−1, se considera que n es un probable primo; en

caso contrario n no puede ser primo. Si n es un probable primo se escoge un nuevo

valor para a, y se itera nuevamente reduciendo el margen de error probable. Al utilizar

exponenciación binaria las operaciones necesarias se realizan muy rápidamente.

Page 51: Criterios de Primalidad

Se puede demostrar que un número compuesto es clasificado "probable primo" en una

iteración del algoritmo con una probabilidad inferior a 1/4; de hecho, en la práctica la

probabilidad es mucho menor.

El algoritmo es de orden O(k log2(n)) = O(log2(n)) como vimos anteriormente.

Un comentario acerca de la probabilidad de error en estos algoritmos. Realizar 50

iteraciones del algoritmo de Miller-Rabin es algo plausible de llevar a cabo y

tendríamos que la probabilidad de errar sería 1/450 = 1/2100 una probabilidad muy

inferior a la de que caiga un meteorito y destroce el laboratorio donde se está realizando

el experimento. Pero es que incluso realizando “sólo” 20 iteraciones tenemos que la

probabilidad de error es 1/240 que es inferior a la probabilidad de que se produzca un

error de hardware que produzca un error de cálculo y haga fallar al algoritmo. Teniendo

en cuenta estas afirmaciones se ve claramente que hay que tener muy mala suerte para

que uno de estos algoritmos falle en la práctica.

Ejemplo: Supongamos que queremos determinar si n=221 es primo. Escribimos n-1 =220

como 22 · 55, de modo que tenemos s = 2 y d=55. Seleccionamos al azar a < n de 174.

Procedemos a calcular:

a20 · d mod n = 17455 mod 221 = 47 ≠ 1, n − 1

a21 · d mod n = 174110 mod 221 = 220 = n − 1.

Desde 220 ≡ −1 mod n, 221 es primo, o 174 es mentiroso fuerte para 221. Tomamos otro a,

esta vez escogemos a=137:

a20 · dmod n = 13755 mod 221 = 188 ≠ 1, n − 1

a21 · dmod n = 137110 mod 221 = 205 ≠ n − 1.

Por lo tanto 137 es un testigo de la descomposición de 221, y 174 en realidad era un mentiroso

fuerte.

Primalidad y Curvas Elípticas

Page 52: Criterios de Primalidad

El siguiente paso en el estudio de la primalidad consiste en sustituir los grupos cíclicos

o de Galois utilizados en anteriores certificados por otros grupos donde, tal vez, sea más

sencillo trabajar. Este es el caso de el grupo de puntos de una curva elíptica modulo n.

El proceso es el mismo que el utilizado para determinar la primalidad de un entero

cuando trabajábamos con grupos Z/(nZ)* y comprobábamos que existía un elemento de

orden n − 1 o que el cardinal era n − 1.

En éste caso utilizamos propiedades sobre el cardinal del grupo de puntos de una curva

elíptica módulo n cuando n es un número primo.

Debido al gran desarrollo que ha tenido el mundo de las curvas elípticas en los últimos

años, se disponen de bastantes propiedades y algoritmos relacionados con el propósito

que buscamos.

El algoritmo de Goldwasser-Kilian

Iniciamos la discusión con el siguiente teorema:

Teorema: Sea N un entero primo con 6 y E una curva elíptica sobre Z/(NZ), junto con

un punto P en E. Sean además dos enteros m y s tales que s | m.

Para cada divisor primo q de s, anotamos(mq )P=(xq : yq : zq) Asumimos que

mP = OE y que mcd ( zq , N )=1 ∀q . Entonces si p es un divisor de N, se cumple que:

# E(Z/ (pZ)) ≡0 (mod s).

En las condiciones del teorema anterior podemos, entonces formular que:

Proposición Certificado de Goldwasser-Kilian:

En las condiciones del teorema anterior, si s>(√√N+1 )2, entonces N es primo.

Entonces, combinando el teorema y la proposición anterior, con el algoritmo de Schoof

(permite que uno calcule el número de puntos en curva elíptica sobre un campo finito)

que computa # E(Z/ (pZ)) en tiempo O(( log p )8+e), obtenemos el algoritmo de

Goldwasser-Kilian:

ALGORITMO:

Page 53: Criterios de Primalidad

1. Escogemos una curva elíptica E sobre Z/(NZ), tal que el número de puntos m

(computados 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, en

caso contrario es compuesto.

3. La primalidad de q se prueba de la misma forma.

4. Final.

El algoritmo ECPP

El algoritmo anterior, sucesivamente vamos creando curvas y computamos 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 este 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ón 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. Se conjetura que tiene complejidad

polinomica de orden O((logN¿4+e) para todos los numero enteros, pero no está

totalmente probado, aunque se ha probado para la mayoría.

Test de primalidad AKS

Manindra Agrawal, Neeraj Kayal y Nitin Saxena publicaron en 2002, en su artículo

PRIMES is in P el primer certificado de primalidad cuya complejidad polinómica está

completamente probada, sin tener que recurrir a ninguna conjetura no probada.

presentaron un algoritmo determinista de clase P para la determinación de la primalidad

de un número.

Page 54: Criterios de Primalidad

La clave del nuevo algoritmo AKS está en la siguiente extensión del pequeño teorema

de Fermat: dados dos enteros a; N tales que mcd(a;N) = 1, entonces N es primo si y sólo

si

(x−a)N ≡ ( x N−a )(mod N )

Por tanto, dado N como entrada, para ejecutar un test de primalidad para

N escogemos a con mcd(a;N) = 1 y verificamos la ecuación. El cálculo de

(x−a)N, sin embargo, es exponencial (en logN) si hemos de probar todos las

a's posibles. Para superar este problema, los autores evalúan los dos lados de la ecuación

módulo un polinomio xr−a para un valor adecuado de r, es decir, calculan

(x−a)N ≡ ( x N−a ) (mod xr−a , N )¿.

En esta ultima ecuación, quiere decir que r es un número primo y que r - 1 tiene un

factor primo q grande que divide al orden de N (mod r). La existencia de un r con esta

propiedad está garantizada por resultados previos en teoría de números. Además, los

autores prueban que, para un N muy grande, un valor adecuado de r se puede conseguir

en el intervalo [c1(logN)6; c2(logN)6] para unas ciertas constantes positivas c1 y c2.

Por tanto, para ejecutar un test de primalidad para un N dado, el algoritmo

AKS consiste en dos iteraciones. En la primera, se selecciona un valor adecuado de r.

Comenzando en r = 2 e incrementando r en una unidad en cada paso, se comprueba que

mcd(r, N) = 1 (en otro caso N es compuesto), se comprueba que r es primo por

búsqueda exhaustiva (lo que supone comprobar O(logN)6 posibles factores), que el

factor más grande q, de r-1 satisface

q ≥4(log N)r1 /2 y que n(r−1)/q ≠ 1(mod r ). Una vez seleccionado el valor de r, el algoritmo

hace una segunda iteración que verifica la ecuación (**) para todos los valores de a

entre 1 y 4(log N)r1 /2 (la elección del rango en esta segunda iteración se hace por

razones técnicas en la demostración de la corrección del algoritmo). Si en cualquier

iteración la ecuación (**) deja de satisfacerse, entonces N es compuesto. Si no, N es

primo.

Page 55: Criterios de Primalidad

Los autores se las arreglaron para formular el siguiente algoritmo, que se ha probado

puede ejecutarse en un tiempo de complejidad máxima de

O ((log n¿¿12+ ϵ n).

Los autores demostraron además que si determinados números primos (llamados

Primosde Sophie Germain) tienen la distribución conjeturada por un matemático

llamado Ardí, el exponente 12 que aparece en la expresión de complejidad puede

reducirse a 6. Sin embargo AKS no tiene relevancia en la práctica.

Page 56: Criterios de Primalidad

Números primos y criptografía

El Teorema Fundamental de la Aritmética es un resultado de existencia. Nos dice que

para cada número existe una manera de escribirlo como producto de números primos

pero no nos dice cómo hacerlo. Si consideramos un número natural “pequeño”, digamos

3.780, podemos descomponerlo fácilmente en producto de primos haciendo divisiones

sencillas: 3.780 = 2 × 2 × 3 × 3 × 3 × 5 × 7.

Uno pensaría que esta operación, se puede hacer con cualquier número. Esto no es así ni

mucho menos. En general, encontrar los números primos que dividen a un número dado

es un problema muy difícil, y no sólo desde un punto de vista teórico, sino también

computacional. Es decir, que ni el ordenador más potente puede encontrar, en un tiempo

razonable, los divisores primos de un número un poco grande. Tanto es así que muchos

métodos de codificación de información usan este hecho.

Los primeros sistemas de transmisión de mensajes secretos se basaban en el intercambio

de una clave entre el emisor y el receptor con un contacto directo previo. Esto, en

comunicaciones a grandes distancias no era muy práctico ya que hacía necesario que

emisor y receptor se juntasen cada vez que motivos de seguridad obligaban a cambiar la

clave. En 1977, Rivest, Shamir y Adleman, científicos del MIT (Masachussests Institute

of Technology) en EEUU, idearon un esquema de cifrado de clave pública. Según este

método, llamado RSA por las iniciales de los apellidos de sus creadores, el receptor

Page 57: Criterios de Primalidad

hace público un número natural “grande”, del cual conoce su descomposición en

factores primos.

Lo anterior se basa en criptografía de clave pública. Cuya idea es cifrar un mensaje de

alguna manera, de forma que sea ilegible para el que no sepa descifrarlo. Para ello

necesitamos dos elementos básicos: un algoritmo de cifrado, y dos clave.

Este tipo de cifrado, es llamado cifrado asimétrico, en el que se utilizan dos claves

relacionadas, de forma que si se cifra con una, se debe descifrar con la otra, y viceversa.

Si mantenemos una de ellas secreta, y sólo entregamos la otra, cualquiera puede cifrar

mensajes que sólo yo puedo descifrar. Y al revés, si yo cifro un mensaje, cualquiera

puede descifrarlo, pero sabe que sólo yo he podido cifrarlo. Esto es lo que se conoce

como sistemas de clave pública: de la pareja de claves, una se distribuye libremente

(clave pública), y la otra se mantiene secreta (clave privada). Estos sistemas son

ampliamente utilizados en informática, tanto para cifrar mensajes como para firmarlos

digitalmente. En efecto, si yo cifro un mensaje con mi clave privada, existe la certeza de

que sólo yo he podido cifrar ese mensaje, por lo que es el equivalente a una firma.

¿Cómo se consigue esto? La criptografía asimétrica se basa en algoritmos no

reversibles, es decir, no tienen un algoritmo inverso. Además, tienen la peculiaridad de

que una pareja de claves se relaciona de la forma mencionada antes. Si cifro con una,

sólo puedo descifrar con la otra. Un punto fundamental es que la relación entre las

claves no es evidente, es decir, no se puede deducir la clave privada a partir de la clave

pública.

La base de todo este tinglado son los números primos. Supongo que todo el mundo

recuerda lo que es un número primo. Otra definición importante a tener en cuenta es la

de números coprimos. Bien, una vez recordadas estas nociones básicas de matemáticas,

vamos a explicar de forma sencilla uno de los algoritmos de cifrado asimétrico más

utilizados: RSA. La generación de la pareja de claves en RSA se hace de la siguiente

manera:

1. Buscamos dos números primos distintos (y bastante grandes), a los que

llamaremos p y q.

2. Obtenemos el producto de dichos números (p · q), al que llamaremos n. Es decir,

n = p·q.

Page 58: Criterios de Primalidad

3. Obtenemos el producto de los dos números primos menos uno, es decir (p-1) (q-

1), al que llamaremos z. Es decir, z = (p-1) · (q-1). Ésta es la llamada función φ

de Euler, y nos indica el número de todos los números coprimos con n, menores

o iguales que n.

4. Buscamos un número primo, menor que z, y coprimo con z, es decir, que no sea

factor de z, o dicho de otra manera, que z no sea múltiplo de ese número. A este

número lo llamaremos e. Tenemos por tanto que z no es divisible por e.

5. Buscamos un número, al que llamaremos d, tal que su producto con e, se pueda

dividir entre z, dando como resto 1. O dicho de otra manera, d·e - 1 es divisible

entre z.

Una vez hecho esto, resulta que estos números tienen unas propiedades muy

interesantes. Si escogemos un número cualquiera m, y realizamos la operación me mod

n (donde mod se refiere al resto de la división, es decir, calculo el resto de me/n),

obtengo un número, al que llamaremos c, que cumple lo siguiente: m=cd mod n. Es

decir, si utilizo e, como exponente, obtengo un número, al que si le aplico el mismo

algoritmo, pero con d como exponente, me da el número original. Así que ya tenemos

nuestra pareja de claves. El par (e, n) sería la clave pública, y el par (d, n) sería la clave

privada.

Hemos calculado e y d (las claves) a partir de z, pero este último número no lo

necesitamos para nada una vez calculadas las claves, y por tanto lo podemos borrar para

siempre (al igual que los números p y q). Si conociéramos z, podríamos deducir una

clave a partir de la otra, ya que eso es lo que hemos hecho durante la generación de

claves (primero generamos e, y luego d a partir de z y e). Y para obtener z, necesitamos

factorizar n (es decir, obtener los números primos que lo componen, p y q). Con nuestro

conocimiento actual de matemáticas, tenemos herramientas para saber si un número es

primo o no, sin necesidad de factorizarlo. Factorizar un número suficientemente grande,

puede llevar siglos aunque utilicemos los ordenadores más rápidos del mundo, mientras

que averiguar si un número del mismo tamaño es primo o no, se puede hacer en

segundos (o minutos).

Esto quiere decir que si encontramos una forma de factorizar números grandes en poco

tiempo, habremos descifrado el algoritmo RSA. O dicho de otra forma, para descifrar el

algoritmo, necesitamos encontrar nuevas técnicas de factorización de números. Es decir,

Page 59: Criterios de Primalidad

necesitamos conocimientos de matemáticas que, a día de hoy, nadie tiene. No importa

los conocimientos de informática que uno tenga, sino los conocimientos de

matemáticas. Otra posible forma de reventar el algoritmo sería desarrollando

supercomputadoras millones de veces más rápidas que las actuales, algo que de

momento no es posible con la actual tecnología de semiconductores de silicio (tal vez se

consiga con futuros ordenadores cuánticos).

Este número es usado por el emisor para cifrar sus mensajes. La idea es que aunque

todo el mundo tiene acceso a la clave pública y al mensaje cifrado, éste sólo pueden ser

descifrado si se conocen los números primos que dividen al número clave. Para que nos

hagamos una idea de qué significa “grande”, actualmente se considera segura una clave

pública dada por un número natural de más de 300 cifras. Por supuesto, a medida que

evolucionan las capacidades de los ordenadores, la idea de lo que es un número

“grande” va cambiando.

Estas aplicaciones de los números primos en el campo de la criptografía muestran cómo

las Matemáticas más abstractas pueden tener relación directa con actividades tan

mundanas como el uso de un cajero automático.

Page 60: Criterios de Primalidad

Conclusiones

Luego de realizar este trabajo llegamos a las siguientes conclusiones:

El aporte de los griegos a los números primos, ayudó enormemente para la creación de los criterios de primalidad.

El constante perfeccionamiento y mejora ha facilitado a compilar los mejores tests de primalidad.

Desde la Criba de Eratóstenes hasta el test de AKS, todos los criterios son efectivos para el cálculo de estos números primos.

Los criterios de primalidad ha permitido seguir formando la lista de los números primos.

Como señalamos en el trabajo, los criterios probabilísticos son tan efectivos como los criterios determinísticos.

El pequeño teorema de Fermat es considerado hoy en día la base de métodos de

verificación de números primos que se utilizan aún hoy en ordenadores

electrónicos.

En los últimos años los primos de Mersenne se han buscado utilizando el test de

Lucas-Lehmer y son los números primos más grandes que se han encontrado.

Los métodos de factorización también han contribuido a determinar los números primos.

Page 61: Criterios de Primalidad

A la hora de encontrar los números primos, el test de AKS es el criterio más efectivo para encontrarlos.

Los criterios señalados en este trabajo son empleados y es de gran ayuda en la criptografía.

Bibliografía

T.M. apostol, Introducción a la teoría analítica de números.

Alberto Rodríguez García, Certificados de Primalidad

José L. Bueso Montero, Números Perfectos Y Matemáticos Imperfectos.

Rocío Gutiérrez Bermejo, Historia De Las Matemáticas

Los Números Primos.

Equipo Torneo El Numero de Oro, Apuntes De Matemáticas Olímpicas, Santiago De Chile, 2008.

Páginas web:

http://ciencia.astroseti.org/matematicas/articulo.php?num=3492

http://es.wikilingue.com/ca/N

%C3%BAmero_primo#Teorema_de_Tchebychev

http://es.wikilingue.com/ca/Test_de_primalitat_de_Solovay-Strassen

Page 62: Criterios de Primalidad

http://en.wikipedia.org/wiki/Pocklington_primality_test

http://www.lorem-ipsum.es/blogs/hal9000/?p=35