Hola a todos, hoy os voy a explicar como obtener los números primos entre dos números en Java.
Puede ser que nos sea necesario sacar los números primos en un rango de números.
La idea es pedir dos números por teclado y mostrar los números primos hay entre esos dos que pidamos. Para ello, recorreremos desde el primer número hasta el segundo número e iremos guardando aquellos que sean primos.
Para saber si un número es primo o no, tenemos un manual para ello.
También vimos en otro post, como contar los números primos que hay entre 2 números.
https://www.discoduroderoer.es/contar-el-numero-de-primos-entre-dos-numeros-en-java
Lo primero, como siempre, pediremos lo que necesitemos.
import java.util.Scanner; public class PrimosEntreDosNumeros { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe el primer número 1"); int num1 = sn.nextInt(); System.out.println("Escribe el primer número 2"); int num2 = sn.nextInt(); } }
Después, crearemos un array con la longitud del numero de primos que tenemos, para ello, necesitamos recuperar la s funciones que vimos en los anteriores manuales.
import java.util.Scanner; public class PrimosEntreDosNumeros { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe el primer número 1"); int num1 = sn.nextInt(); System.out.println("Escribe el primer número 2"); int num2 = sn.nextInt(); int[] primos = new int[cuentaPrimosEntre(num1, num2)]; } public static int cuentaPrimosEntre(int minimo, int maximo) { if (maximo < minimo) { int aux = minimo; minimo = maximo; maximo = aux; } int contador = 0; for (int i = minimo; i <= maximo; i++) { if (esPrimo(i)) { contador++; } } return contador; } public static boolean esPrimo(int numero) { if (numero <= 1) { return false; } int contador = 0; //bucle que cuenta los numeros divisibles for (int i = (int) Math.sqrt(numero); i > 1; i--) { if (numero % i == 0) { contador++; } } return contador < 1; } }
A continuación, iremos recorriendo del numero 1 al numero 2 (incluyendo el mismo) e iremos guardando el número en el array si es primo. Mostramos el array al final.
import java.util.Scanner; public class PrimosEntreDosNumeros { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe el primer número 1"); int num1 = sn.nextInt(); System.out.println("Escribe el primer número 2"); int num2 = sn.nextInt(); int[] primos = new int[cuentaPrimosEntre(num1, num2)]; int indice = 0; for (int i = num1; i <= num2; i++) { if (esPrimo(i)) { primos[indice] = i; indice++; } } for (int i = 0; i < primos.length; i++) { System.out.println(primos[i]); } } public static int cuentaPrimosEntre(int minimo, int maximo) { if (maximo < minimo) { int aux = minimo; minimo = maximo; maximo = aux; } int contador = 0; for (int i = minimo; i <= maximo; i++) { if (esPrimo(i)) { contador++; } } return contador; } public static boolean esPrimo(int numero) { if (numero <= 1) { return false; } int contador = 0; //bucle que cuenta los numeros divisibles for (int i = (int) Math.sqrt(numero); i > 1; i--) { if (numero % i == 0) { contador++; } } return contador < 1; } }
Al pedir dos números, puede pasar que el numero 2 sea menor que el numero 1, entonces haremos un intercambio de variables para evitar esta situación.
import java.util.Scanner; public class PrimosEntreDosNumeros { public static void main(String[] args) { Scanner sn = new Scanner(System.in); System.out.println("Escribe el primer número 1"); int num1 = sn.nextInt(); System.out.println("Escribe el primer número 2"); int num2 = sn.nextInt(); if (num2 < num1) { int aux = num1; num1 = num2; num2 = aux; } int[] primos = new int[cuentaPrimosEntre(num1, num2)]; int indice = 0; for (int i = num1; i <= num2; i++) { if (esPrimo(i)) { primos[indice] = i; indice++; } } for (int i = 0; i < primos.length; i++) { System.out.println(primos[i]); } } public static int cuentaPrimosEntre(int minimo, int maximo) { if (maximo < minimo) { int aux = minimo; minimo = maximo; maximo = aux; } int contador = 0; for (int i = minimo; i <= maximo; i++) { if (esPrimo(i)) { contador++; } } return contador; } public static boolean esPrimo(int numero) { if (numero <= 1) { return false; } int contador = 0; //bucle que cuenta los numeros divisibles for (int i = (int) Math.sqrt(numero); i > 1; i--) { if (numero % i == 0) { contador++; } } return contador < 1; } }
Este seria el resultado:
Os lo dejo en forma de función:
public static int[] primosEntre(int minimo, int maximo) { if (maximo < minimo) { int aux = minimo; minimo = maximo; maximo = aux; } int[] primos = new int[cuentaPrimosEntre(minimo, maximo)]; int indice = 0; for (int i = minimo; i <= maximo; i++) { if (esPrimo(i)) { primos[indice] = i; indice++; } } return primos; }
Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.
Deja una respuesta