김현이

[Java] Obtener números primos de forma Lazy usando Stream

Creado: 2024-07-23

Creado: 2024-07-23 19:39

Comúnmente, para verificar si n es un número primo, se divide n por los números del 2 al n - 1 y se comprueba si es divisible.

En este método, apliquemos algunas optimizaciones para mejorarlo y hacerlo más eficiente, y usemos Stream para aplicar la evaluación diferida.


Método ingenuo

El siguiente es un método ingenuo para verificar si n es un número primo.

Mejoras

  • Cuando n = a x b, podemos asumir que a > b sin perder generalidad.
    Es decir, solo necesitamos verificar hasta sqrt(n). La operación sqrt() es costosa, por lo que podemos reemplazarla con la condición i * i <= n.
  • Los números primos mayores que 5 tienen la forma 6k ± 1. Por lo tanto, podemos reducir el número de comprobaciones incrementando i de 6 en 6.

Método mejorado


Aplicación de la evaluación diferida con Stream

Los Stream de Java, a diferencia de las Listas, no ejecutan la operación definida inmediatamente.

En su lugar, permanecen en un estado de espera, con la definición de cómo calcular cada elemento, y solo ejecutan la operación necesaria para obtener un elemento específico cuando se necesita ese elemento.

Utilizando esto, podemos crear un Stream que encuentre números primos de la siguiente manera.

Resultado de la ejecución

Código completo

Resultado de la ejecución

[Java] Obtener números primos de forma Lazy usando Stream




Comentarios0