fork download
  1. def d(n)
  2. total = 1
  3. (2..Math.sqrt(n)).each do |i|
  4. if n % i == 0
  5. total += n / i + i
  6. end
  7. end
  8. total
  9. end
  10.  
  11. def amicable_pair?(a, repo)
  12. repo[a] = b = d(a)
  13. a != b && a == repo[b]
  14. end
  15.  
  16.  
  17. def add_amicable_pairs(n)
  18. repo = {}
  19. total = 0
  20. n.times do |i|
  21. if amicable_pair?(i, repo)
  22. total += (i + repo[i])
  23. end
  24. end
  25. puts total
  26. end
  27.  
  28. add_amicable_pairs 10000
Success #stdin #stdout 0.31s 7432KB
stdin
Standard input is empty
stdout
31626