03/11/2014, 11:52
|
| | 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! |