エラトステネスの篩もよいけれど、別の問題もやろうよ。ということで「完全数」です。 def perfect(n = 100, &block) sum = Array.new(n + 1, 1) (2..n).each do |i| if i == sum[i] block.call(i) end k = i + i while k <= n sum[k] += i k += i end end sum end perfect(10000) do |k| print "#{k}, " end #=> 6, 28, 496, 8128,あらら? エラトステネスの篩とほぼ同じになっちゃった♪ 完全数 (Wikipedia) 追記:おお、Danさんが反応してくださいました。感謝です♪ http://blog.livedoor.jp/dankogai/archives/50538972.html