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");
}
}
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.