Ver Mensaje Individual
  #1 (permalink)  
Antiguo 03/11/2014, 11:52
carvear
 
Fecha de Ingreso: mayo-2011
Mensajes: 31
Antigüedad: 13 años, 5 meses
Puntos: 0
Primos Circulares

Gente, dado el problema. Devolver todos los primos circulares menores a 1000 (Utilizando Threads).
Donde un primo circular es que todas sus rotaciones sean primos, por ejemplo: 197 es primo circular, ya que 197, 971 y 719 son primos.

Corrijanme:
1 - Seria bueno utilizar Threads para ver todas las combinaciones que tiene un numero para ver si es primo.

2 - Seria bueno utilizar Threads para ver cada numero del 1 al 1000 si son primos.

3 - O donde y como utilizarían Threads ustedes.

4 - Lo desarrolle tirando un thread por cada numero del 1 al 1000, que les parece eso?

5 - Respecto a la implementacion, hice lo siguiente, pero tarda mucho el programa en terminar, seguro hay algo que no estoy haciendo bien. Les pego la clase abajo.

public class MyThread extends Thread {
static List<Integer> lista_salida = new ArrayList<Integer>();

/* Constructor de la clase */
public MyThread(String str){
super(str);
}

/* Muestra por pantalla los elementos de una lista */
private static void mostrar_lista_elementos(List elementos){
int i=0;
while(i < elementos.size()){
System.out.println(elementos.get(i));
i++;
}
}

/* Codigo a ser ejecutado por Threads */
public void run(){
Primo pr = new Primo(Integer.parseInt(getName()));
int valor = pr.numero;
if (pr.es_primo_circular()){
lista_salida.add(valor);
System.out.println("Primo Circular: "+valor);
}
}

/* Metodo principal */
public static void main (String [] args) throws InterruptedException {
int numero_evaluado = 1000001;
for(int i=2;i<numero_evaluado;i++){
new MyThread(Integer.toString(i)).start();
Thread.sleep(1);
}
Thread.sleep(2000);
System.out.println("Cantidad de Primos Circulares Menores a "+numero_evaluado+": " + lista_salida.size());
}
}


Gracias!