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
esPrimode 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
forexterno 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 queies un número primo. - Luego, otro bucle interno marca todos los múltiplos de
icomofalse(no primos) empezando desdei * ihasta el límite (limite).
- El bucle
- Crear la Lista de Números Primos:
- Se recorre nuevamente el array
esPrimodesde 2 hasta ellimite. Todos los índices marcados comotrueson 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 = 50en este caso). - Llama a la función
encontrarNumerosPrimosy 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.
