Mostrar si un número es primo con Ruby

Los números primos son todos aquellos números que solo tienen dos divisores, el 1 y él mismo; por ejemplo, el número 139 es primo ya que solo se puede dividir por 1 y por 139. Este programa escrito en Ruby cuenta con las siguientes 3 características:

  1. Evalúa el número ingresado por el usuario.
  2. Nos muestra cuántos divisores tiene el número.
  3. Nos muestra si un número es o no es primo.
#!/usr/bin/env ruby

aux = 0

print "Ingrese el número a evaluar: "
numero = gets().to_i

puts " "
print "El número es divisible por: "
1.step numero do |n|
    if numero % n == 0
      aux += 1
      print "[#{n}] "
    end
end

if aux == 2
    puts "\nEl número ingresado es primo!!"
else
    puts "\nEl número ingresado no es primo!!"
end

El lenguaje de programación Ruby forma parte de lo que se conoce como Lenguajes Interpretados, eso quiere decir que los programas no requieren ser compilados sino que sólo requieren un intérprete que se encarga de leer línea por línea e interpretarlas en tiempo de ejecución. Ruby tiene una sintaxis sencilla y limpia.



Shebang #!/usr/bin/env ruby:

Los caracteres #! son conocidos como Shebang y son muy famosos en los sistemas tipo UNIX ya que permite ejecutar programas que requieren un intérprete, directamente sobre la línea de comandos sin necesidad de escribir el nombre del intérprete; por ejemplo, ./NumerosPrimos.rb en lugar de $ruby NumerosPrimos.rb.

Declarando variable:
aux = 0

Se declara una variable llamada aux de tipo int que inicializa con un valor de cero (0). Esta variable jugará el papel de contador que ayudará a saber si un número es primo o no, cuando se evalúe al final del programa.

Solicitando y leyendo el número ingresado por el usuario:
print "Ingrese el número a evaluar: "
numero = gets().to_i

Con la función print imprimimos un mensaje solicitando al usuario que ingrese un valor numérico que desea evaluar. En la segunda línea leemos el valor ingresado por el usuario usando gets() y lo almacenamos en una nueva variable llamada numero; pero dicho valor debe ser convertido a un tipo int debido a que todo dato leído por gets es de tipo string, esta labor se hace invocando a to_i.

Procesando la información:
puts ""
print "El número es divisible por: "
1.step numero do |n|
    if numero % n == 0
      aux += 1
      print "[#{n}] "
    end
end

La función puts en la primera línea se ha usado para generar un salto de línea, mientras que en la segunda línea se imprime en pantalla un mensaje informativo usando la función print. Hay una diferencia entre ambas funciones, la primera se usa cuando queremos imprimir información con salto de línea al final, equivalente a «\n» mientras que la segunda no genera salto de línea.

Método .step numero do |n|:

Con el método .step iteramos desde 1 hasta numero, incluyendo el último valor; mientras que cada número que se genera en cada iteración se almacena en la variable |n| para ser posteriormente usado. En el interior del iterador step se realiza una operación matemática para comprobar con una condicional if si numero % n es igual a 0, si es true, entonces la variable aux se incrementa en 1 y se imprime el valor en la variable n que representa al divisor de numero. Al ejecutar el programa el resultado se verá de esta forma:

El número es divisible por: [1] [2017]

Los divisores de numero entre corchetes [..] y separados por un espacio.

Parte final, ¿es o no es número primo?:
if aux == 2
    puts "\nEl número ingresado es primo!!"
else
    puts "\nEl número ingresado no es primo!!"
end

Esta sentencia if únicamente va a comprobar si la variable aux es igual o no a 2, ¿por qué? Recordemos que todo número primo solo tiene dos divisores como se explicó al comienzo. Si la variable aux es igual a 2, entonces muestra un mensaje indicando que el número ingresado si es primo; de lo contrario indicará que no lo es.

Ejecutando la aplicación:

Al ejecutar la aplicación, nos mostrará en pantalla algo como esto:

[fixedtorres@linuxero]$ ./NumeroPrimo.rb
Ingrese el número a evaluar: 2017

El número es divisible por: [1] [2017] 
El número ingresado es primo!!
[fixedtorres@linuxero]$




Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *