Contar el número de primos entre dos números en Java

Hola a todos, hoy os voy a explicar como contar el número de primeros entre dos números en Java.

Puede ser que necesitemos el número de primos que hay entre dos números.

La idea es pedir dos números por teclado e indicar cuantos números primos hay entre esos dos que pidamos. Para ello, recorreremos desde el primer número hasta el segundo número e ir incrementando un contador cuando sea primo.

Para saber si un número es primo o no, tenemos un manual para ello.

Número primo en Java

Lo primero, como siempre, pediremos lo que necesitemos.

import java.util.Scanner;

public class ContarPrimosEntreDosNumeros {

    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();
        
    }

}

Necesitaremos rescatar la función para saber si un número es primo o no.


import java.util.Scanner;

public class ContarPrimosEntreDosNumeros {

    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();
        
    }

    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;
    }

}

Necesitaremos una variable para ir guardando el número de primos que vayamos contando.


import java.util.Scanner;

public class ContarPrimosEntreDosNumeros {

    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 contador = 0;

    }

    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;
    }

}

Después, iremos recorriendo del numero 1 al numero 2 (incluyendo el mismo) e iremos incrementando el contador, si este es primo. Mostramos la variable contador al final.


import java.util.Scanner;

public class ContarPrimosEntreDosNumeros {

    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 contador = 0;

        for (int i = num1; i <= num2; i++) {
            if (esPrimo(i)) {
                contador++;
            }
        }

        System.out.println("El número de primos es de " + 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 ContarPrimosEntreDosNumeros {

    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 contador = 0;

        for (int i = num1; i <= num2; i++) {
            if (esPrimo(i)) {
                contador++;
            }
        }

        System.out.println("El número de primos es de " + 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 es el resultado:

Os dejo también la versión en función para que lo reutilicéis en otros proyectos.


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;
}

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *