Looks like I took a pretty common approach on this one. First I calculated all the abundant numbers and dropped the sums in a hash. Then I just summed up to the given upper bound of 28,124 excluding those abundant sums.
Ruby1.9 solves it on my computer in about 15 seconds. After reading through the forums, some people were using a much lower upper limit of 20,200 which brought my run time down to a much respectable 6 seconds.
Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers.
def sum_proper_divisors n
sum = 1
(2..Math.sqrt(n)).each do |i|
if n % i == 0
result = n / i
sum += result unless result == i
sum += i
end
end
sum
end
def next_abundant repo
i = repo.last + 1
while( sum_proper_divisors(i) <= i)
i += 1
end
i
end
max = 20_200
repo = [12]
sums = {24 => nil}
total = 0
while repo.last < max do
repo << next_abundant(repo)
repo.each do |i|
sum = repo.last + i
if sum > max
break
end
sums.store sum, nil
end
end
max.times do |i|
total += i unless sums.include? i
end
puts total