# -*- coding: utf-8 -*- # http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2021 # require 'mathn' # 約数関数でnの約数の総和を求める. def d(n) n.prime_division.reduce(1){|mul, pd| mul * ((0 .. pd[1]).reduce(0){|sum, e| sum + (pd[0] ** e) }) } - n end # 1 .. 10000で友愛数を探して合計する. puts 1.upto(10000).reduce(0) {|sum, i| sum + (((j = d(i)) > 0) ? (j != i && i == d(j) ? i : 0) : 0) }