Project Euler Problem 21

問題

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.

For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110;
therefore d(220) = 284.
The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.

Evaluate the sum of all the amicable numbers under 10000.

ソース

require 'mathn'

class Integer
	def divisor_sum
		array = []
		self.prime_division.each do |a|
			a[1].times do
				array.push(a[0])
			end
		end
		count = [1]
		1.upto(array.size - 1) do |n|
			array.combination(n).to_a.each do |c|
				count.push(c.inject(:*))
			end
		end
		count.uniq.inject(:+)
	end
end

puts (1...10000).inject(0) {|s, i|
	s + (i != (d = i.divisor_sum) && i == d.divisor_sum ? i : 0)
}

解答

31626

感想

友愛数(amicable numbers)の定義ではまった。。。
Wikipedia*1で調べると完全数を含まないので、6, 28, 496, 8128は友愛数ではない。。
ちゃんと問題に書いてよ〜〜〜〜〜〜