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
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.
ResponderEliminar//Imprimir un salto de línea cada 100 números probados
if(i % 100 == 0)
System.out.println();
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.
ResponderEliminarMuchos saludos.
Por cierto, este programa imprime números primos mediante un formato de tabla. Aquí puse algunos: Lista de Números Primos
ResponderEliminarPorque raiz de n es igualmente válido? gracias.
ResponderEliminar