´Indice general

Anuncio
Í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
Descargar