Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Encontrando Números Primos
Encontrando Números Primos
N (N)
10 100 1,000 10,000 100,000 1,000,000 10,000,000 100,000,000 1,000,000,000 10,000,000,000 100,000,000,000 1,000,000,000,000 10,000,000,000,000 100,000,000,000,000 1,000,000,000,000,000 10,000,000,000,000,000 4 25 168 1229 9592 78498 664579 5761455 50847534 455052511 4,118,054,813 37,607,912,018 346,065,536,839 3,204,941,750,802 29,844,570,422,669 279,238,341,033,925
Euclides, 300 a de C.
Aclaracin
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 59, 61, 67, 71, 73, 79, 83, 89, 97
Los 168 nmeros primos menores de 1000 son:
Entre 1 y 100: Entre 401 y 500: Entre 901 y 1000: Entre 999901 y 1000000:
25 24 14 8
"There are some mysteries that the human mind will never penetrate. To convince ourselves we have only to cast a glance at tables of primes and we should perceive that there reigns neither order nor rule Leonhard Euler
10
Version Mejorada
11
Patrn
12
13
Prueba
Euclides Gauss
Por contradiccin: Suponemos que es falsa la afirmacin del teorema, esto es, existen enteros que no pueden descomponerse como producto de primos, sea n el ms pequeo de estos y analicemos: - n no puede ser primo, su factorizacin estara dada por l mismo y el teorema se cumple. - Si n no es primo tiene una factorizacin en no primos, digamos n = a b, pero a y b son obviamente ms pequeos que n, por lo que tienen una factorizacin en numeros primos, esto implica que n tiene una factorizacin en numeros primos.
14
16
2 30203 133020331 1713302033171 12171330203317121 151217133020331712151 1815121713302033171215181 16181512171330203317121518161 331618151217133020331712151816133 9333161815121713302033171215181613339 11933316181512171330203317121518161333911
Titanic prime: aquel que tiene ms de mil digitos, en 1984 solo se conocian 110 titanic primes. Gigantic: ms de 10,000 digitos. Twin primes: Aquellos que estan separados por 2, ejemplo:
(17,19) (8627,8629) (521,523)
17
Mersenne primes
Son del tipo 2p 1 Marin Mersenne (1588-1648), monje frances que estableci que 2n 1 es un nmero primo para n
n = 2, 3, 5, 7, 13, 17, 19, 31, 67, 127 y 257
Sin embargo deja sin verificar sus resultados, de eso se encargaron unos siglos despues Euler con el 31, Lucas con el 127, Pervouchine el 61, que Mersenne no habia considerado, asi como el 89 y el 107, estos ultimos verificados por Powers, asi, para 1947 la lista para n menor o igual a 256 estaba completa:
n = 2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107 y 127.
18
Los primeros
M521 A las 10:00 P.M. del 30 Enero de 1952, con la M607 U.S. National Bureau of Standards Western Automatic Computer (SWAC) en el Institute M1279 for Numerical Analysis en la University of California, Los Angeles M2203 M2281 M4253 (titanic) M44497 (gigantic) M6972593 (megaprime, mas de 1 millon de digitos)
19
El ms grande
El 4 de septiembre de 2006 el Dr. Curtis Cooper y Dr. Steven Boone's en la CMSU descubren el primo Mersenne #44
32,582,657 2 -1
Este nmero tiene 9,808,358 digitos y es 650,000 digitos ms grande que el previo record encontrado en diciembre de 2005. Sin embargo se quedaron cortos respecto de los 10 millones de digitos que se requieren para recibir el premio de 100,000 dolares otorgado por la Electronic Frontier Fundation. El nuevo primo fue verificado en 6 dias utilizando 16 procesadores Itanium de 21.5 GHz.
20
$50,000 to the first individual or group who discovers a prime number with at least 1,000,000 decimal digits (awarded Apr. 6, 2000) $100,000 to the first individual or group who discovers a prime number with at least 10,000,000 decimal digits $150,000 to the first individual or group who discovers a prime number with at least 100,000,000 decimal digits $250,000 to the first individual or group who discovers a prime number with at least 1,000,000,000 decimal digits
21
22
En la naturaleza
Ciclo de vida de la Cigarra
23
PrimeTimeClock
El unico reloj que marca la hora correcta1769 veces al da
24
Comunicacin inteligente
25
Son numeros primos que representan informacin que es prohibido posser o distribuir, ya que interpretada de cierta manera describe algun programa que viola las leyes de derechos de autor. Escrito en hexadecimal, este nmero primo representa un un codigo fuente de C, comprimido, que se usa para desencriptacion de DVD y evitar copias piratas de los mismos.
Primos Ilegales
4856507896573978293098418946942861377074420873513579240196520736 6869851340104723744696879743992611751097377770102744752804905883 1384037549709987909653955227011712157025974666993240226834596619 6060348517424977358468518855674570257125474999648219418465571008 4119086259716947970799152004866709975923596061320725973797993618 8606316914473588300245336972781813914797955513399949394882899846 9178361001825978901031601961835034344895687053845208538045842415 6548248893338047475871128339598968522325446084089711197712769412 0795862440547161321005006459820176961771809478113622002723448272 2493232595472346880029277764979061481298404283457201463489685471 6908235473783566197218622496943162271666393905543024156473292485 5248991225739466548627140482117138124388217717602984125524464744 5055834628144883356319027253195904392838737640739168912579240550 1562088978716337599910788708490815909754801928576845198859630532 3823490558092032999603234471140776019847163531161713078576084862 2363702835701049612595681846785965333100770179916146744725492728 3348691600064758591746278121269007351830924153010630289329566584 3662000800476778967984382090797619859493646309380586336721469695 9750279687712057249966669805614533820741203159337703099491527469 1835659376210222006812679827344576093802030447912277498091795593 8387121000588766689258448700470772552497060444652127130404321182 610103591186476662963858495087448497373476861420880529443
26
Estrella mgica
167
167
167
167
167
167
27
CRIPTOLOGIA
Comuinicacin segura
Cripografia
Tecnicas para encriptar mensajes
Criptoanalisis
Tecnicas para desifrar mensajes encriptados
ENIGMA
28
CRIPTOGRAFIA
Clave privada
Sustitucin monoalfabtica Sustitucin polialfabtica
Clave pblica
RSA (utiliza numeros primos muy grandes)
29
CRIPTOANALISIS
Clave privada
Frecuencias Indice de coincidencias
30
31
Criba de Eratstenes
- Astrnomo, matemtico, poeta, gegrafo y filsofo. -Su mayor reconocimiento se debe a que calcul el dimetro de la Tierra. -Encargado de la biblioteca de Alejandra hasta su muerte.
32
Implementacion
int main() { clock_t ti; NUM = 100000000; ti=clock(); arreglo=(char*)calloc(NUM,sizeof(char)); buscador(); for(i=0;i<NUM;i++) { if(arreglo[i]=='1') contador++; } printf("\nTotal de numeros primos encontrados: %d\n",contador); printf("Tiempo: %f\n", (clock()-ti)/(double)CLOCKS_PER_SEC); return 0; } void buscador() { int i,j; double n=sqrt(NUM); arreglo[0]='0'; arreglo[1]='0'; for(i=2;i<=NUM;i++) arreglo[i]='1'; for(i=2;i<n;i++) { if(arreglo[i]=='1') { for(j=2;j<=floor(NUM/i);j++) arreglo[j*i]='0'; } } }
33
for principal
for( i = 2; i < n; i++) { if( arreglo[ i ] == '1' ) { for( j = 2; j <= floor ( NUM / i ); j++) arreglo[ j * i ] = '0'; } }
0 0 0 1 0 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 1 10 1 11 1 12 1 13 1 14 1 15 1 16 1 17 1 18 1 19 1 20 1 21 1 22 1 23 1 24 1 25 1
34
for principal
for( i = 2; i < n; i++) { if( arreglo[ i ] == '1' ) { for( j = 2; j <= floor ( NUM / i ); j++) arreglo[ j * i ] = '0'; } }
0 1 0 1 0
2
1
3 1
5 1
7 1
9 1
10
11 1
12
13 1
14
15 1
16
17 1
18
19 1
20
21 1
22
23 1
24
25 1
35
for principal
for( i = 2; i < n; i++) { if( arreglo[ i ] == '1' ) { for( j = 2; j <= floor ( NUM / i ); j++) arreglo[ j * i ] = '0'; } }
0 2 0 1 0
2
1
3
1
4 0
5 1
7 1
8 0
10 0
11 1
12
13 1
14 0
15
16 0
17 1
18
19 1
20 0
21
22 0
23 1
24
25 1
36
for principal
for( i = 2; i < n; i++) { if( arreglo[ i ] == '1' ) { for( j = 2; j <= floor ( NUM / i ); j++) arreglo[ j * i ] = '0'; } }
0 3 0 1 0
2
1
3
1
4 0
5
1
6 0
7 1
8 0
9 0
10
11 1
12 0
13 1
14 0
15
16 0
17 1
18 0
19 1
20
21 0
22 0
23 1
24 0
25
0 37
for principal
for( i = 2; i < n; i++) { if( arreglo[ i ] == '1' ) { for( j = 2; j <= floor ( NUM / i ); j++) arreglo[ j * i ] = '0'; } }
0 0 1 0
2
1
3
1
4 0
5
1
6 0
7
1
8 0
9 0
10 0
11
1
12 0
13
1
14 0
15 0
16 0
17
1
18 0
19
1
20 0
21 0
22 0
23
1
24 0
25 0
38
Notemos
Si queremos encontrar los primos hasta N, basta con calcular los que hay hasta raz de N y eliminar sus mltiplos para obtener todos los primos hasta N.
39
MI Algoritmo
Dado un numero N, calcular todos los nmeros primos menor que N 1. Calcular raz de N [ n sqrt(N) ] 2. Utilizar el algoritmo de Eratstenes para encontrar los nmeros primos hasta n 3. Eliminar los mltiplos de los primos encontrados, desde n+1 hasta N
40
Implementacin secuencial
Inicializacion del arreglo for(i=2;i<NUM;i++) P[i]=1; P[0]=0; P[1]=0; Se encuentran todos los numeros primos hasta raiz del numero original for(i=2;i<n;i++) if(P[i]==1) for(j=2;j<=num/i;j++) P[j*i]=0; Contamos cuantos primos se encontraron hasta raiz de NUM for(i=2;i<num;i++) if(P[i]==1) contador++; Se crea un arreglo que contendra los numeros Primos Encontrados hasta raiz de NUM Ptemp=(int*)calloc(contador,sizeof(int)); j=0; for(i=2;i<num;i++) if(P[i]==1){ { Ptemp[j]=i; j++; } Se marcan los numeros no primos en la parte que resta del arreglo for(j = 0; j < contador; j++){ if((num + 1) % Ptemp[j] == 0) aux = (num + 1) / Ptemp[j]; else aux = ((num + 1) / Ptemp[j]) + 1; for(i = aux; i <= NUM / Ptemp[j]; i++) P[Ptemp[j] * i] = 0; } Se cuentan los primos encontrados y se imprimen los resultados contador = 0; for(i = 0; i < NUM; i++) if(P[i] == 1) { contador++; printf("%d\t",i); ultimo = i } printf("\n%d\n",contador); printf(Primo mas grande %d,ultimo); printf("Tiempo : %f\n",(clock()-ti) / (double) CLOCKS_PER_SEC);
41
Funcionamiento
num
0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1
NUM
0 0 0 0
TODOS
PROC 2 PROC 1
PROC 3
PROC 4
PROC 5 PROC 6
PROC 7
PROC 8
-Todos los procesadores calculan los primos hasta num = raz de NUM -El resto del arreglo (NUM - num) se divide entre el numero de procesadores -El primer procesador (id = 0) toma el residuo si es que la divisin del trabajo no es exacta -Cada procesador marca con 0 los multiplos de los primos entre 2 y num -Al terminar de marcar los mltiplos, cada procesador cuenta elementos que quedaron sin marcar (1) y pasa el contador al siguiente procesador. -Por ultimo, el ultimo procesador tiene el total de nmeros primos encontrados.
43
Implementacin
Inicializacin del arreglo con que se va a trabajar for(i=2;i<NUM;i++) P[i]=1; P[0]=0; P[1]=0; Se encuentran todos los nmeros primos hasta raiz de NUM for(i=2;i<n;i++) if(P[i]==1) for(j=2;j<=num/i;j++) P[j*i]=0; Contamos cuantos primos se encontraron hasta raiz de NUM for(i=2;i<num;i++) if(P[i]==1) contador++; Se crea un arreglo que contendr los nmeros primos encontrados hasta raz de el numero original Ptemp=(int*)calloc(contador,sizeof(int)); j=0; for(i=2;i<num;i++) if(P[i]==1) { Ptemp[j]=i; j++; } 44
Se divide el trabajo y cada procesador calcula el inicio y fin de la parte del arreglo que le toca
num
0 0 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1
NUM
0 0 0
TODOS
PROC1 PROC 2 chunk _size PROC 3 PROC 4 PROC 5 PROC 6 PROC 7 PROC 8
new_size
all_start
Cada procesador elimina los multiplos de los numeros primos que encontro hasta raiz de NUM
for(j = 0; j < contador; j++)
{
P[Ptemp[j] * i]=0;
}
45
Cada procesador cuenta los primos que encontr y se imprimen los resultados if(my_id == 0) { Imprime los nmeros primos que encontro, los cuenta y envia el contador al procesador con identificador 1, solo si hay mas de un procesador. MPI_Send(&contador, 1, MPI_INT, 1, tag, MPI_COMM_WORLD); } else { MPI_Recv(&contador, 1, MPI_INT, my_id - 1, tag, MPI_COMM_WORLD, &Stat); Recibe el contador del procesador con identificador uno meor al propio, imprime los numeros primos que encontro, cuenta cuntos fueron y lo suma al contador, enva el contador al procesador con identofocador uno ms que el propio, solo si no es el ltimo procesador. MPI_Send(&contador, 1, MPI_INT, my_id + 1, tag, MPI_COMM_WORLD); } El ultimo procesador imprime la cantidad de primos encontrados y el tiempo de ejecucin
46
RESULTADOS
- Los experimentos se ejecutaron para NUM = 100 millones
Terico
El Prime Number Theorem nos estima (100000000) ~ 100000000 = 5,428,681 log(100000000) Diferencia: 332744
100000000
= 5,762,208
Diferencia: 753
48
TIEMPOS PROMEDIO
SEC 1 PROC 2 PROC 3 PROC 4 PROC 5 PROC 6 PROC 7 PROC 8 PROC
74.843
75.046
36.702
27.891
23.614
20.99
18.672
17.974
16.754
80 70 60 50 40
30
20 10 0 1 2 3 4 5 6 7 8
Procesadores
49
Speed Up
Absoluto: Cuantas veces es mas rpido un programa paralelo respecto del secuencial utilizando p procesadores. Relativo: Cuantas veces es mas rpido un programa paralelo con p procesadores respecto del mismo programa ejecutado con un procesador.
50
Speed Up Absoluto
1 PROC 2 PROC 3 PROC 4 PROC 5 PROC 6 PROC 7 PROC 8 PROC
0.997295 2.039208
2.68341 3.169433
Speedup absoluto
51
Speed Up Relativo
2 PROC 3 PROC 4 PROC 5 PROC 6 PROC 7 PROC 8 PROC
2.044739
2.690689
3.17803
3.575322
4.019173
4.175253
4.479289
Speedup Relativo
52
Ley de Amdahl
La fraccin paralela de un programa nunca ser el 100%. pf + sf = 1
Speed up esperado
53
54
Speed Up Esperado
2 PROC 3 PROC 4 PROC 5 PROC 6 PROC 7 PROC 8 PROC
1.88859
2.68341
3.398555
4.04543
4.63338
5.17009
5.66198
Speedup esperado
6 5 4
3
2
1
0 1 2 3 4 Procesadores 5 6 7 8
55
Speedups
Speedup's
Esperado Absoluto 6 5 4 3 2 1 0 1 2 3 4 Procesadores 5 6 7 8
Relativo
56
Eficiencia
Costo
Total de recursos utilizados.
57
Eficiencia
1 PROC 2 PROC 3 PROC 4 PROC 5 PROC 6 PROC 7 PROC 8 PROC
0.997295 1.019604
0.89447 0.792358
0.71313
Eficiencia
1.2
0.8
0.6
0.4
0.2
0 1 2 3 4 Procesadores 5 6 7 8
58
Costo
1 PROC 2 PROC 3 PROC 4 PROC 5 PROC 6 PROC 7 PROC 8 PROC
75.046
73.404
83.673
94.456
Costo
104.95
112.032
125.818
134.032
59
60
Referencias
Prime Obsession, John Derbyshire, 2003, National Academy of Sciences. http://www.mersenne.org/ http://www.wikipedia.com http://everything2.net/ http://primes.utm.edu/mersenne/ http://w2.eff.org/awards/coop.php http://www.primetimeclock.com/ http://primes.utm.edu/howmany.shtml http://mac6.ma.psu.edu/primes/prime_count/pix.html
61