HOLA!!!
Resultados de codigos entregados para los primeros 100 numeros primos:
Fermino v1: 24984 iteraciones, resultado correcto.
Fermino v2: 24984 iteraciones, resultado correcto.
Azav v1: 5745 iteraciones, resultado correcto.
Azav v2: 3481 iteraciones, resultado correcto.
2Fac3R: [ERROR] El codigo no devuelve los primeros 100 numeros primos, Output:
3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99 0 6 16 3077807600 3077807492 3077807488 3077462358 3077810296 3077772892 3077778712 0 3077467751 3077976052 3077978376 1 134519376 3077902505 3077978816 3074909459 1 1 0 3077296832 3077807492 3077807600 3077808804 3076452340 2 1 1 3074909803 3076453348 3074729160 3215560036 3077978376 3077813704 134519360 3076452340 3074909925 134514048 134519565 134519408 3076453348 3077808756 3074909878 134519360 134514299 134514048 134519565 134519408
iteraciones: 99
Once: 2377 iteraciones, resultado correcto. Iteraciones reales: 270 , Iteraciones anidadas: 2107.
rush: [ERROR] el codigo no calcula los primeros x numeros primos calcula sobre una base de aleatoreidad y aparte es tu funcion primos es un check if it prime, entonces aunque te arregle el codigo y quite la parte de aleatoreidad por un r++; tu codigo daria los numeros primos por debajo de 100, no los primeros 100.
rollth: [ERROR] el codigo no calcula los primeros x numeros primos, sino que calcula los numeros primos menores a x.
Expermicid: [INVALIDADO] Iteraciones 100, utiliza un poco de magia negra por que no calcula realmente los primos, sino que los solicita a una funcion embebida. Tu codigo es sublime, pero con solo poner Prime.first X ya tenes los primeros X numeros primos sin mas problemas y sin tantas lineas.
OLM: [ERROR] El codigo es bueno, pero empieza a calcular los primos desde 7, lamento informar que el primer primo es 2. Output:
[7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563]
[Q]3rV[0]: [ERROR] Buen codigo, me gusto pero lamentablemente el codigo no calcula los primeros x numeros primos, sino que calcula los numeros primos menores a x.
bocha: [ERROR] El codigo no calcula primos.
rollth: [ERROR] El codigo no devuelve los primeros 100 primos (Checkea que figura el 4 en vez del 3). Output:
Introduce un numero: 2
4
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
211
223
227
229
233
239
241
251
257
263
269
271
277
281
283
293
307
311
313
317
331
337
347
349
353
359
367
373
379
383
389
397
401
409
419
421
431
433
439
443
449
457
461
463
467
479
487
491
499
503
509
521
523
541
d3ztr3za: [ERROR] El codigo no calcula los primeros 100 fijos, se usa un array que contiene a los primeros 4.
OLM v2: 145530 iteraciones, resultado correcto.
Quitando codigos erroneos e invalidados por ahora nos queda asi:
1er Puesto: Once 2377 iteraciones
2do Puesto: Azav v2 3481 iteraciones
3er Puesto: Fermino v1 y v2 24984 iteraciones
4to Puesto: OLM v2: 145530 iteraciones
GRACIAS POR LEER!!!
¿Os importaría publicar el código para ver como lo hicisteis?
Podría mejorar el mio si el for solo fuese hasta la mitad, no es necesario comprobar los números mayores a la mitad del numero a comprobar.
Yo dejo el mio, he utilizado Python.
def calcular_primos(n):
array = []
primo = True
num = 2
while n > 0:
for i in range(2,num):
if num%i == 0:
primo = False
if primo == True:
array.append(num)
n-=1
primo = True
num+=1
return array
Saludos.
HOLA!!!
Codigos Ganadores:
1er Puesto: Once 2377 iteraciones
import math
p = 3
primos = [2]
n = input("Ingrese n: ")
while n > len(primos):
if not filter(lambda x: not p % x, range(3, int(math.sqrt(p)) + 1, 2)):
primos.append(p)
p += 2
print primos
2do Puesto: Azav v2 3481 iteraciones
listaprimos = [2]
n = int(input("¿Cuantos números primos desea calcular?\n>"))
k = 3
while len(listaprimos) < n:
var = True
for primo in listaprimos:
if primo > (k // 2):
break
if (k % primo) == 0:
var = False
break
if var:
listaprimos.append(k)
k += 2
print(listaprimos)
input()
3er Puesto: Fermino v1 y v2 24984 iteraciones
<?php
function Primo($N)
{
//if($N == -1 || $N == 0 || $N == 1) // Si no es primo ni compuesto devolvemos NULL (Adaptado para la ocasión, como comenzamos la iteración en 2, esto se puede bypassear);
// return null;
for($i = 2; $i < $N; $i++) // Testeamos el resto de una división, desde 2, hasta $N -1;
if(($N % $i) == 0) // Si es 0 (Encontramos un divisor además de 1 o $N), devolvemos FALSE;
return false;
return true; // Sino, devolvemos TRUE;
}
function Primos($X)
{
for($j = 2, $i = 0; $i < $X; $j++) // Si aún no encontramos $X primos ($i = cantidad de primos encontrados; $j = 0, aumenta en cada iteración) (Comenzamos la iteración en 2, sabiendo que ni 0 ni 1 son primos);
{
if(Primo($j) === true) // Si es primo;
{
$Data[] = $j; // Lo agregamos al array de datos;
$i++; // Aumentamos el contador de primos encontrados;
}
}
return $Data;
}
var_dump(Primos(20));
4to Puesto: OLM v2: 145530 iteraciones
def calcular_primos(n):
array = []
primo = True
num = 2
while n > 0:
for i in range(2,num):
if num%i == 0:
primo = False
if primo == True:
array.append(num)
n-=1
primo = True
num+=1
return array
Conste que esos son los codigos enviados, todos fueron editados para calcular la cantidad de iteraciones.
Mencion especial:
Expermicid creo un codigo que realmente es el mas simple y usa magia negra, solo para que sepan como fue:
require 'mathn'
lista = []
print "Ingrese la cantidad de numero primos que desea "
n = gets.chomp
pri = Prime.instance
pri.each do |prime|
lista << prime
puts prime # linea que muestra los numeros
break if lista.size == n.to_i
end
Yo le comente que con solo usar Prime.first X ya tenia el ejercicio resuelto.
Felicitaciones a todos los participantes.
GRACIAS POR LEER!!!
Aqui va mi codigo arreglaod, de verdad, quise hacerlo mas rapido y lo arruine, cuantas interacciones hace numeros? que no se como mirarlo
/* Numeros primos */
#include <stdio.h>
int main() {
int num2,x,primo,mitad;
primo=1;
printf("Introduce un numero: ");
scanf("%d",&num2);
for (int num1=1;primo<=num2;num1++){
mitad=(num1/2);
x=0;
for(int i=1;i<=num1&&x<=2;i++)
{
if(i==mitad&&num1>=20){
i=num1-1;
}
if(num1%i==0){
x++;
}
}
if(x==2)
{
printf("%d\n",num1);
primo++;
}
}
}
:O creí que lo que hacía filter no contaba. Podría haber sacado todo con menos iteraciones con este código:
import math
iteraciones = 0
p = 3
primos = [2]
n = input("Ingrese n: ")
while n > len(primos):
iteraciones += 1
for x in xrange(3, int(math.sqrt(p)) + 1, 2):
iteraciones += 1
if not p % x:
break
else:
primos.append(p)
p += 2
print primos
print iteraciones
1277 iteraciones
Saludos!
HOLA!!!
Rolth, tu codigo hace 27201 iteraciones.
Once, las iteraciones del bucle while superior no cuentan , por que son tomadas en cuenta en las iteraciones internas del bucle for, por ende ese codigo lo realiza en 1007 iteraciones, felicitaciones!
GRACIAS POR LEER!!!
Estaba esperando los resultados, tenía esperanza de ganar pero Once me superó, ¡felicitaciones Once!
Lo que me extrañó bastante es que de 11 participantes sólo 4 hayan enviados códigos válidos, eso quiere decir que tal vez la instrucciones no se entregaron de manera muy clara o detallada. Hay que mejorar eso la próxima vez.
Respecto a los retos, sigan así, la iniciativa es muy buena. Este primer reto fue bastante sencillo, ideal para que todos pudieran participar, seguramente los siguientes irán siendo un poco más complejos pero es importante que no dejen de lado a mucha gente.
¡Saludos!
En unas horas subo el #2!!
Espero que el próximo no ser descalificado por mago oscuro xD jaja
Saludos
jajaja Expermicid, usa tus poderes mágicos!!!
Saludos
Jajajaja parece ser que no entendí muy bien el reto entonces xD!, iba a enviar otro programa, pero pensé que solo se podía enviar una sola vez!