es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java Básico – Encontrar si un número es primo utilizando un ciclo while

Tengo una pregunta sobre una respuesta que se dio aquí hace un tiempo.

Llegué a la misma respuesta yo mismo en el código adjunto, pero estoy tratando de entender por qué necesito dividir el número de entrada por 2 (línea 10), y no simplemente dejar que el bucle siga su curso hasta que se alcance el valor del número de entrada.

import java.util.Scanner;
public class numEsPrimo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int i = 2; 
        boolean esPrimo = true;
        System.out.println("Ingrese un número");
        int num = sc.nextInt();

        while (i < num )   // (i <= num / 2)
        {
            if (num % i == 0) 
                esPrimo = false; 
            i++;
        }

        if (esPrimo)
            System.out.println(num + " es un número primo");
        else // !esPrimo
            System.out.println(num + " no es un número primo");

    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual se divide el número de entrada entre 2 (línea 10) es optimizar el bucle y reducir el número de iteraciones necesarias para determinar si el número es primo o no. Dado que un número no puede ser dividido por uno mayor a la mitad de sí mismo y producir un resultado entero, solo necesitamos verificar hasta la mitad del número de entrada. Esto reduce el número de iteraciones necesarias y hace el código más eficiente. Sin embargo, en algunos casos esto puede resultar en falsos positivos, que son números que son marcados como primos cuando en realidad no lo son. Para solucionar esto, la condición del bucle podría ser cambiada a (i <= Math.sqrt(num)), lo cual verificaría hasta la raíz cuadrada del número de entrada en su lugar.

Comments are closed.