Pretty standard Project Euler solution. You only need to check up to the square of each number, and you can cache each calculation as you go along.
Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
If d(a) = b and d(b) = a, where a ≠ b, then a and b are an amicable pair and each of a and b are called amicable numbers.Evaluate the sum of all the amicable numbers under 10000.
def d(n) total = 1 (2..Math.sqrt(n)).each do |i| if n % i == 0 total += n / i + i end end total end def amicable?(a, repo) repo[a] = b = d(a) a != b and a == repo[b] end repo = {} total = 0 10_000.times do |i| if amicable?(i, repo) total += (i + repo[i]) end end puts total