You are on page 1of 5

Politcnico Grancolombiano.

, Londoo Lemus Oscar Ricardo Miguel Angel Zapata Fraile

Anlisis Experimental de Algoritmos para Test de


Primalidad y Generacin de Primos.
Londoo Lemus, Oscar Ricardo (orlondon@gmail.com)
Miguel Angel Zapata Fraile (miguel_azf@hotmail.com)
Politcnico Grancolombiano
2.
Lo ponemos a ejecutar con varios
valores de N
Resumen Este texto propone un esquema
de experimentacin para comparar la
eficiencia temporal y espacial de tres
algoritmos que generen nmeros primos y tres
algoritmos que comprueben la Primalidad de
un nmero natural dado. Seleccionaremos 3
algoritmos de generacin de nmeros primos y
3 algoritmos de test de primalidad
seleccionados de fuentes confiables, por
ultimo buscaremos 7 referencias que nos den
un soporte sobre cmo hacer el anlisis
experimental de algoritmos.
ndice de TrminosGeneracin de
nmeros primos, test de primalidad, anlisis
de algoritmos, diseo de algoritmos.

I. INTRODUCCIN

ara conocer ms del esquema de


experimentacin, es necesario mostrar
cada uno de los algoritmos
seleccionados, de esta forma se podrn
describir con exactitud los objetivos de las
pruebas correspondientes y se tendr clara la
funcionalidad y exactitud con que deben
ejecutarse cada uno de los algoritmos para ser
comparados, igualmente se describir
brevemente su complejidad, se mencionara el
tamao de la prueba y la cantidad de
experimentos.

II. ANLISIS EXPERIMENTAL DE


ALGORITMOS
Para recurrir al mtodo experimental
debemos
1.

Programamos el cdigo

Premio Colombiano de Informtica ACIS 2011

3.
Tabulamos los tiempos medidos en
funcin n, n2, n log(n), etc.
4.
analizamos a qu grupo de
complejidad se ajusta mejor
A fin de hacer medidas tenemos que tener
en cuenta varios aspectos prcticos

1.
Realizar la operacin un nmero
elevado de veces, con datos aleatorios, para
quedarnos con un valor promedio o
tendencia 2.
2.
ejecutar el programa una serie de
veces antes de medir para asegurarnos de
que el compilador ha generado cdigo
optimizado referencias.

En java para medir los tiempos que tarda


podremos utilizar el siguiente script.

//Tiempo en que el algoritmo empieza


long initAsc=System.nanoTime();
//Algoritmo a medir
es
este
caso quickSort
numberEntryPrincipalInstructionAsc=quick
Sort( arrayTestAsc,0,arrayTestAsc.length1);
//Tiempo en que se termina de ejecutar el
algoritmo

Politcnico Grancolombiano., Londoo Lemus Oscar Ricardo Miguel Angel Zapata Fraile

long endAsc=System.nanoTime();
//Tiempo que tardo el algoritmo en
ejecutarse timeAsc=endAsc-initAsc;

III ALGORITMOS DE GENERACIN DE


NMERO PRIMOS
Un Algoritmo de factorizacin en nmeros
primos es un algoritmo para generar una lista
de nmeros primos; los ms usados son los
siguientes. Sea N el nmero compuesto a
factorizar Sea Pues la lista de nmeros primos
actualmente
obtenida
Si N = 1, entonces el nmero no es
factorizable (es 1).
Si no es 1:
i=2
mientras i < (N+1) y
N no sea 1
si i es
primo, y N es
divisible por i
agregamos i a Ps
Hacemos N =

N/i
sino
incrementamos i
fin-si
finmientras
devolve
mos Ps

El siguiente algoritmo es similar pero que


consiste en iterar hasta la raz cuadrada de
N[1]
Si N = 1, entonces el nmero no es
factorizable. si N = 2, o N = 3:
agregamos N a Ps, devolvemos Ps
i=2 mientras i <
(raizcuad(n)+1) y N no
sea 1
si i es primo, y
N es divisible por i
agregamos i a Ps
Hacemos N = N/i
sino
incrementamos i
fin-si
fin-mientras
Premio Colombiano de Informtica ACIS 2011

Agregamos N a
Ps devolvemos
Ps
Este algoritmo combina los algoritmos
anteriores y consiste
en, adems, ir incrementando i de a 2, 4, 2, 4..
[2]
aumentar=2
Si N = 1, entonces el nmero no es
factorizable. si N = 2, o N = 3:
agregamos N a Ps, devolvemos Ps
i=6
si N es divisible por 2, agregar 2 a
Ps, hacer N = N/2 si N es divisible
por 3, agregar 3 a Ps, hacer N = N/3
mientras i < (raizcuad(n)+1) y N no
sea 1
si (i-1) es primo, y N es
divisible por i
agregamos i a Ps
Hacemos N = N/i
sino
si aumentar=2 entonces aumentar=4 sino
aumentar=2 finsi
i=i
+
aumenta
r
finsi
fin-mientras
Agregamos N
a
Ps
devolvemos
Ps
Notas
Un nmero compuesto (llamemoslo C) no
puede tener ms de un factor primo que sea
mayor a su raz cuadrada
Demostracion: Supongamos que s puede
haber ms de uno. Llamemos A y B a esos
dos nmeros primos. Llamemos P1, P2,.. Pn
al resto de los nmeros primos factores de C.
Sea dA = A - raizcuad (C)
Sea dB = B - raizcuad (C)
Si A y B son mayores que la raz cuadrada de
C,
entonces dA y dB sern positivos
Entonces C = A*B*P1*P2... =
(raizcuad
(C)+dA)*(raizcuad
(C)
+dB)*P1*P2... = (raizcuad (C)*raizcuad
(C) + dA*raizcuad (C) + dB*raizcuad (C) +
dA*dB)*P1*P2... = (C +
(dA+dB)*raizcuad (C) + dA*dB)*P1*P2...
C*P1*P2.. + (dA+dB)*raizcuad (C)*P1*P2...
+ dA*dB*P1*P2...

Politcnico Grancolombiano., Londoo Lemus Oscar Ricardo Miguel Angel Zapata Fraile

Obviamente, toda esa suma es mayor a C.


Como partimos diciendo que C era igual a
esa suma llegamos a una contradiccin
Por lo tanto, a lo sumo un factor puede ser
mayor que la raz cuadrada de C.
Volver arriba Los nmeros primos
(mayores que 3) pueden expresarse de la
siguiente forma: 6n1 (siendo esta la ms
eficiente para soluciones iterativas de
programacin).

n^3+n^2+17, que da 11 primos distintos para


n desde 0 hasta 10.
2 n^2+11, igual que el anterior.
2 n^2+29, que da 29 primos distintos para n
desde 0 hasta 28. 36 n^2-810 n+ 2753, que da
45 primos distintos para n desde 0 hasta 44.

Demostracion: Todo nmero natural puede


expresarse como 6nr, para algn n. R variara
solo entre 0 y 5.
6n+0 es divisible por 6 SIEMPRE
6n+2 es divisible por 2 SIEMPRE
6n+3 es divisible por 3 SIEMPRE
6n+4 es divisible por 2 SIEMPRE
6n+1 y 6n-1 (o lo que es lo mismo a efectos
del anlisis, 6n+5), no proporcionan
ninguna garanta de divisibilidad, por lo
tanto los nmeros primos solo pueden
encontrarse entre ellos).

Bibliografa.

Tambin existen polinomios los cuales son de


ayuda para la generacin de nmeros
primos como los que se describen a
continuacin:
El polinomio n^2+n+41 es bien conocido
como generador de nmeros primos. Bueno,
genera unos cuantos, no nos vayamos a
emocionar. Como deca, se sabe que este
polinomio genera nmeros primos distintos
para valores de n desde 0 a 39, como ya
vimos aqu hace ya bastante tiempo. Este
hecho parece ser que era conocido ya por
Euler, y la lista de esos nmeros primos es la
siguiente:
41
,
43,47,53,61,71,83,97,113,131,151,173,197,22
3,251,281, 31
3,347,383,421,461,503, \\
547,593,641,691,743,797,853
,
911,971,1033,1097,1163,1231,
1301,1373,1447,1523,1601
Para n=40 el resultado es 1681, que no es
primo ya que 1681=41^2.
Para el caso de x^2-79x+1601, da el mismo
listado que el anterior al derivar del primero,
el de Euler, y que se consigue a partir de l
mediante la transformacin n=x-40.
Despus de todo esto seguro que muchos os
preguntis si existen polinomios que aporten
realmente algo a esto de generar nmeros
primos. Pues la respuesta es s. Os pongo
algunos ejemplos:
Premio Colombiano de Informtica ACIS 2011

Sitio web
https://sselbergg.wordpress.com/2013/11/04/fu
ncionesque-generan-numeros-primos/
Libro: A prime-representing function, W. H.
Mills, Bull.
Amer. Math. Soc. 53 (1947), p. 604.
Sitio
Web
http://en.wikipedia.org/wiki/Proth_prime#Prot
h_primes.

IV. ALGORITMOS DE TEST DE


PRIMALIDAD

Test de Wilson: (n 1)! 1 (mod n) si y


solo si n es primo. (El inconveniente es que
el computo del factorial es un problema
computacionalmente ms complejo que la
factorizacin, ver [Lpez-Tena, 1990]).
2. Test de Lucas: Sea a natural con 1 a<n
y mcd(a, n) = 1, tal que a^n1 1 (mod n),
pero a^n 1/q 1 (mod n) , para todo
factor primo q de n 1. Entonces n es
primo.
(El inconveniente en este caso es la
necesidad de conocer la factorizacin de n
1 y como hemos dicho, factorizar es
computacionalmente un problema difcil).
El comentario anterior, a propsito del test
de Lucas, muestra que, para
nmeros
particulares,
pueden ser
factibles tests deterministas de primalidad
eficientes y fciles de implementar.

Politcnico Grancolombiano., Londoo Lemus Oscar Ricardo Miguel Angel Zapata Fraile

3.Test de Proth: n = A2^r + 1, A < 2r. Sea p


primo tal que n no es cuadrado modulo p.
Entonces n es primo si y solo si p^n1/2
1 (mod n).
Los tests anteriores tienen una complejidad
similar a la de los tests probabilsticos (en
concreto O(log3n)) y han permitido obtener
los records, ver [Ribemboim, 1988], de
primos conocidos. As, el primo nmero 38
de Mersenne, M38 = 26972593 1 posee
ms de dos millones de dgitos. Bien es
cierto que, por ahora, primos de este
tamao (conocidos como primos titnicos)
no tienen demanda en el mercado.
5. Teorema de Fermat: Sea p un primo y a
entero tal que
mcd(a, p) = 1. Se verifica que

(a)^p1 1 (mod p).


Para todo
a
existen tambin
contraejemplos
a la implicacin
inversa (pseudoprimos en base a), as:
-n = 91 = 7 13, para a = 3. Ntese que,
aunque 91 no es pseudoprimo en base 2, sin
embargo, n = 1105 es pseudoprimo en
ambas bases 2 y 3. Existen nmeros,
denominados nmeros de Carmichael, n,
impar compuesto, tales que a, mcd(a, n) =
1 verifican (a) ^n1 1 (mod n).
(Ejemplos: 561, 1105, etc).
Del teorema de Fermat y dado que (a)^p1
1=(a^p1/2 1)(a^p1/2 +
1)obtenemos a^p1/2 1 (mod p)
(criterio de Euler). De manera anloga, si p
= 2^et, con t impar, a, 1
a<p, se verifica que, at 1 (mod p) o
bien existe un i, 0 <i<e, tal que a2it 1
(mod p).
Si el inverso del anterior resultado fuese
cierto, se tendra un sencillo test de
primalidad. Pero de nuevo (ley de Murphy)
tal inverso es falso: existen nmeros
impares compuestos (pseudoprimos fuertes)
que verifican dicho resultado (por ejemplo
n = 1373653 = 829 1657 para a=2). Sin
Premio Colombiano de Informtica ACIS 2011

embargo, si el resultado fuese cierto para


toda base a, en lugar de para una sola, n
seria primo. Tenemos nuevamente un test
(determinista) de primalidad, pero en
principio, no efectivo (ya que sera
necesario realizar la comprobacin para
todos los a<n, lo que una vez ms implicar
a una complejidad exponencial).La nocin
de pseudoprimo fuerte proporciona, sin
embargo, un test probabilstico eficiente:

6. Test probabilstico de Miller-Rabin: Sea n


natural impar y k nmero natural prefijado.
Elijamos arbitrariamente k bases a sub i, i
= 1, 2, , k, y para cada base
comprobemos si se verifica alguna de las
condiciones de pseudoprimo fuerte. Si no se
verifican para algn a sub i, entonces n es
compuesto (con probabilidad 1). Si las k
bases verifican dichas condiciones, la
probabilidad de que n sea compuesto es
menor o igual que 1/4k (en realidad la cota
anterior es muy mala, siendo en la practica
la probabilidad mucho menor que 1/4k).
Fcilmente se comprueba que el coste
computacional del test es O(log3 n)
operaciones bit.

Bibliografa

BRESSOUD, D. M.: Factorization and


Primality Testing, Springer-Verlag, 1989
KRANAKIS, E.: Primality and
Cryptography, John Wiley 1986.
RIBEMBOIM, P.: The Book of Prime
Number Records,
Springer, 1988.
VI. REFERENCIAS
[1] Tcnicas de Diseo de Algoritmos Rosa Guerequeta y Antonio Vallecillo
[2]

Sitio

web

Politcnico Grancolombiano., Londoo Lemus Oscar Ricardo Miguel Angel Zapata Fraile

https://sselbergg.wordpress.com/2013/11/04
/funciones-quegeneran-numeros-primos/
[3] Libro: A prime-representing function,
W. H. Mills, Bull. Amer. Math. Soc. 53
(1947), p. 604.
[4]

Sitio
Web
http://en.wikipedia.org/wiki/

Proth_prime#Proth_primes.

Premio Colombiano de Informtica ACIS 2011

[5] Libro BRESSOUD, D. M.:


Factorization and Primality Testing,
Springer-Verlag, 1989
KRANAKIS, E.: Primality and
Cryptography, John Wiley 1986.
[6] Libro RIBEMBOIM, P.: The Book of
Prime Number
Records, Springer, 1988.