sábado, 25 de junio de 2011

Deitel_Java_6.25 c) (Números Primos entre 1 y 1000 en Java)

6.25 c) Este programa imprime los primos menores a 10000. Al principio podría pensarse que n/2 es el límite superior para evaluar si un número es primo (como ocurre en  Deitel_Java_6_25.b), pero lo máximo que se necesita es ir hasta la raíz cuadrada de n. ¿Por qué?. Debido a la cantidad de líneas de salida, es conveniente Redireccionar la Salida.

Este código debe guardarse con el nombre UsaDeitel_6_25.java


 public class UsaDeitel_6_25

 {    // Abre UsaDeitel_6_25

 public static void main(String args[])

 {        // Abre main 

 Deitel_6_25 miObjeto = new Deitel_6_25();
 String auxiliar;
 int Tamano = 10000;

 System.out.printf("\nEste programa imprime los primos entre 1 y %d \n", Tamano);


 for ( int i = 2; i <= Tamano; i++ )
 {         // Abre for
 auxiliar = miObjeto.Primo(i);

 if ( "primo" == auxiliar )
 System.out.printf("%d \n", i );

 }      // Cierra for

 }        // Cierra main
 }    // Cierra UsaDeitel_6_25


El siguiente código debe guardarse como Deitel_6_25.java

 // Esta clase contiene un metodo 
 // que recibe un entero x,  evalua si se
 // trata de un primo o no y regresa esa
 // informacion en forma de una cadena 
 
 public class Deitel_6_25

 {  // Abre clase Deitel_6_25

 public String Primo( int x)

 {            // Abre metodo Primo
 String Estatus = "primo";
 // En principio se concede que el numero
 // recibido es primo, por eso la variable
 // Estatus se inicializa con "primo"
 
 // En este for solo se llega hasta la raiz cuadrada
 // del numero. 
 for ( int i = 2; i <= (int) Math.sqrt(x); i++ )
 {      // Abre for

 // Si el ciclo for empieza desde 1, entonces el
 // Estatus siempre se cambia a "compuesto", ya que
 // todos los numeros son divisibles entre 1
 

 if ( 0 == x % i )
 Estatus = "compuesto";

 // Si el x es divisible entre cualquier otro numero, 
 // entonces es "compuesto"
 
 }      // Cierra for
 return Estatus;
 }            // Cierra metodo Primo

 }  // Cierra clase Deitel_6_25

4 comentarios:

  1. También puedes reducir el número de líneas imprimiendo los números uno al lado del otro y imprimir un salto de línea cada cien números probados.

    //Imprimir un salto de línea cada 100 números probados
    if(i % 100 == 0)
    System.out.println();

    ResponderEliminar
  2. Gracias por el comentario. Es cierto, así como está se va a imprimir una columna. Imprimir 100 y saltar linea puede que funcione para cifras bajas, pero luego en una pantalla chica puede perderse el orden. Abría que imprimir con un poco más de formato.
    Muchos saludos.

    ResponderEliminar
  3. Por cierto, este programa imprime números primos mediante un formato de tabla. Aquí puse algunos: Lista de Números Primos

    ResponderEliminar
  4. Porque raiz de n es igualmente válido? gracias.

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...