De nuevo mirando los tan creativos nombres que le ponen a los tipos de números, me encontré con éstos: los números amigos.

¿Qué son?

Los números amigos son dos enteros positivos a y b, cuya suma de los divisores de b da como resultado a y viceversa.

Por ejemplo 284 y 220 son números amigos ya que:

  • Divisores de 220: 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284.
  • Divisores de 284: 1 + 2 + 4 + 71 + 142 = 220.

He programado un script en Ruby que pide dos números y dice si son amigos o no.

def amicable_numbers(inum_a,inum_b)
i = 1
x = 1
su_a = 0
su_b = 0
  while (i < inum_a)
    if (inum_a % i == 0)
      su_a += i
    end
    i += 1
  end
  while (x < inum_b)
    if (inum_b % x == 0)
      su_b += x
    end
    x += 1
  end
 
 
  if (su_a == inum_b) && (su_b == inum_a)
    return true
  else
    return false
  end
end
 
 
puts "
       --- Amicable Numbers ---
       --- www.daw-labs.com ---
        - www.cibernodo.net  - "
 
print "1 > "
num_a = gets.chomp
print "2 > "
num_b = gets.chomp
puts "Numeros:
      1 = #{num_a}
      2 = #{num_b}"
num_a = num_a.to_i
num_b = num_b.to_i
 
if amicable_numbers(num_a,num_b)
  puts "Los numeros son amigos"
else
  puts "Los numeros no son amigos"
end