我正在尝试编写一个打印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
有人可以帮我把它挤在一行吗?
答案 0 :(得分:0)
例如:
(2..1000).select { |p| p == (1...p).select {|i| p % i == 0}.inject(:+) }
=> [6, 28, 496]
编辑:稍微缩短的版本,正如@steenslag所建议的那样。