一个表达式中的完美数字数组

时间:2014-10-23 15:56:26

标签: ruby

我正在尝试编写一个打印perfect numbers数组的脚本。困难的是我必须只在一个表达式(行)中执行此操作。

我在ruby-doc中搜索了一些有用的方法,但我没有找到关于完美数字的任何内容,所以我只是设法使用两个函数来完成:

def is_perf(n)
n == (1...n).select {|i| n % i == 0}.inject(:+)
end

def perfects(range)
(array = (2..range).to_a).each{|p|array.delete_if{|x| is_perf(x)==false }}
end

有人可以帮我把它挤在一行吗?

1 个答案:

答案 0 :(得分:0)

例如:

(2..1000).select { |p| p == (1...p).select {|i| p % i == 0}.inject(:+) }
=> [6, 28, 496] 

编辑:稍微缩短的版本,正如@steenslag所建议的那样。