style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

¿Como puedo calcular la suma de todos los numeros primos que se encuentren por debajo de 2 millones

Es que simplemente no se como encontrar los numeros primos que esten por debajo y la verdad ya me quebre el coco buscando la respuesta :(

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Euler

Este es un problema de Project Euler. Simplemente comienza a generar números primos hasta llegar a 2 millones.

Dicho de otra forma: Un contador de 1 a 2000000, evaluando si el número actual es primo y en ese caso lo sumas a un total. Es todo.

Coding Kata

Eso me recureda un Coding dojo que organizó VIveCodigo

http://vivecodigo.org/2012/01/19/podcast-12-de-la-temporada-0/

Si el Rompecocos Project Euler

Muchas gracias la verdad de momento se ve complejo pero tiene solucion tambien :)

Imagen de Sr. Negativo

Números primos en Ceylon

Aqui esta mi solución en Ceylon

doc "tarde pero ya pude realizar este ejercicio"
void run(){
        Integer valor=2000000;
        variable Integer suma:=0;

 Boolean esPrimo(Integer numero){
    variable Integer aux:=0;
    variable Integer cont:=2;
        while(cont<numero){
          aux:=numero%cont;
          if(aux==0){
          return true;
          }
          cont++;
        }

        return false;
}

for(Integer n in 1..valor){
        if(esPrimo(n)){
          //print("" n "  es  primo");
          suma:=suma+n;
        }
}
print("suma obtenida: " suma "");

}

Imagen de ezamudio

optimizaciones

Y una vez que obtienes la solución, la puedes empezar a optimizar en Ceylon:

1. No tiene caso iterar sobre números pares porque nunca van a ser primos, puedes descartarlos a todos
2. Para encontrar si un número es primo no tienes que dividir desde 2 hasta el mismo número; realmente puedes hacerlo desde 2 hasta la raíz cuadrada entera de dicho número (o si no quieres calcular eso pues hasta la mitad del número)
3. Puedes usar un fold sobre un iterable filtrado con los primos, o bien la función sum que viene en el módulo de lenguaje, con una comprensión. Al final te queda de una línea:

print(sum(for (i in (1..2000000).by(2)) if (isPrime(i)) i))

o bien

print((1..2000000).by(2).fold(2, (Integer a, Integer b) isPrime(b) then a+b else a))

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">