我怎么检查一个数字是Dudeney数字,使用Ruby?

时间:2015-10-15 04:34:23

标签: ruby

如何使用Ruby检查数字是否为Dudeney数字?以这些结果为例:

dudeney_number?(1)     #=> true
dudeney_number?(125)   #=> false
dudeney_number?(512)   #=> true
dudeney_number?(1728)  #=> false
dudeney_number?(5832)  #=> true

2 个答案:

答案 0 :(得分:5)

嗯,这很容易;只有6个!

def dudeney_number?(x)
    return [1, 512, 4913, 5832, 17576, 19683].include?(x)
end

另请参阅:http://blog.hostilefork.com/six-dudeney-numbers-proof/

答案 1 :(得分:2)

来自https://en.wikipedia.org/wiki/Dudeney_number

  

Dudeney数是一个正整数,是一个完美的立方体,其小数位的总和等于数字的立方根。

以下是该定义的实现:

def dudeney_number?(n)
  digit_sum = n.to_s.chars.map(&:to_i).inject(:+)
  n == digit_sum ** 3
end

1.upto(20000).select { |n| dudeney_number? n }
#=> [1, 512, 4913, 5832, 17576, 19683]

该方法不会检查n是否为正整数。