Este ejemplo utiliza el Algoritmo de la Criba de Eratóstenes, que es un método eficiente para encontrar todos los números primos menores o iguales a un número dado.
fun encontrarNumerosPrimos(limite: Int): List<Int> { // Crear una lista booleana para marcar los números primos val esPrimo = BooleanArray(limite + 1) { true } // Eliminar los números que no son primos for (i in 2..Math.sqrt(limite.toDouble()).toInt()) { if (esPrimo[i]) { for (j in i * i..limite step i) { esPrimo[j] = false } } } // Crear una lista con los números primos encontrados val numerosPrimos = mutableListOf<Int>() for (i in 2..limite) { if (esPrimo[i]) { numerosPrimos.add(i) } } return numerosPrimos } fun main() { val limite = 50 // Define el límite superior para la búsqueda de números primos val primos = encontrarNumerosPrimos(limite) println("Números primos hasta $limite: $primos") }
Explicación del Código
- Inicialización del Array
esPrimo
:- Se crea un array booleano llamado
esPrimo
de tamañolimite + 1
, donde cada elemento se inicializa entrue
. Este array se utiliza para marcar si un número es primo o no.
- Se crea un array booleano llamado
- Criba de Eratóstenes:
- El bucle
for
externo recorre los números desde 2 hasta la raíz cuadrada del límite (sqrt(limite)
), ya que cualquier número mayor que su raíz cuadrada ya habría sido marcado si no es primo. - Si
esPrimo[i]
estrue
, significa quei
es un número primo. - Luego, otro bucle interno marca todos los múltiplos de
i
comofalse
(no primos) empezando desdei * i
hasta el límite (limite
).
- El bucle
- Crear la Lista de Números Primos:
- Se recorre nuevamente el array
esPrimo
desde 2 hasta ellimite
. Todos los índices marcados comotrue
son números primos, y se añaden a la listanumerosPrimos
.
- Se recorre nuevamente el array
- Función
main
:- En la función
main
, se define el límite hasta donde queremos buscar números primos (limite = 50
en este caso). - Llama a la función
encontrarNumerosPrimos
y muestra la lista de números primos encontrados.
- En la función
Salida del Código
Para un límite de 50, la salida sería:
less
Números primos hasta 50: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
Este código te proporciona una forma eficiente y sencilla de encontrar todos los números primos dentro de un rango específico utilizando Kotlin. Puedes modificar el valor de limite
en la función main
para buscar números primos en diferentes rangos.