我正在进行以下练习。
设d(n)定义为n的适当除数之和(小于n的数均匀分为n)。 如果d(a)= b且d(b)= a,其中a≠b,则a和b是友好对,a和b中的每一个都称为友好数字。
例如,220的适当除数是1,2,4,5,10,11,20,22,44,55和110;因此d(220)= 284. 284的适当除数是1,2,4,71和142;所以d(284)= 220。
评估10000以下所有友好数字的总和。
我已经完成了独立运行我的解决方案的每个部分。以下是我到目前为止的情况:
def is_amicable?(num)
proper_factors = (1..(num/2)).select{ |n| num % n == 0}
partner = proper_factors.inject(:+)
if (1..(partner/2)).select{ |n| partner % n == 0}.inject(:+) == num
return true
else
return false
end
end
amicable = (1...10000).select{ |num| is_amicable?(num) }
sum = amicable.inject(:+)
p sum
我的is_amicable?
方法独立运行,但当我一起运行时,我收到错误:
amicable_numbers.rb:5:in `is_amicable?': undefined method `/' for nil:NilClass (NoMethodError)
从我能收集的内容来看,问题出现在这一行:
amicable = (1...10000).select{ |num| is_amicable?(num) }
我不认为/
是未定义的方法;当我独立运行时,该部分工作正常。这是我唯一能够独立运行的行,它只是给出了未定义/错误。
答案 0 :(得分:0)
当您将1传递给is_amicable?
时,您会收到此错误。追踪
num = 1
proper_factors = (1..(num/2)).select{ |n| num % n == 0} => []
partner = proper_factors.inject(:+) => nil
然后你做
partner/2 => NoMethodError: undefined method `/' for nil:NilClass