Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 寻找友好数_Ruby - Fatal编程技术网

Ruby 寻找友好数

Ruby 寻找友好数,ruby,Ruby,我正在做以下练习 设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?

我正在做以下练习

设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
我的
是友好的?
方法是独立工作的,但当我一起运行所有东西时,我得到一个错误:

amicable_numbers.rb:5:in `is_amicable?': undefined method `/' for nil:NilClass (NoMethodError)
据我所知,问题出现在这一行:

amicable = (1...10000).select{ |num| is_amicable?(num) }

我不认为
/
是行中未定义的方法;当我独立运行时,该部分工作正常。这是我唯一无法独立运行的行,它只给出了未定义的/错误。

当您将1传递给
是否友好?
时,您会得到此错误。追溯

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

你的描述自相矛盾。您是否可以独立运行第5行?从
(2..10000)
开始您的友好范围,它将为您工作并返回
40284
;)是的,我能跑5号线。很抱歉,这不是问题所在,我做了正确的编辑。谢谢你把它改成2个作品。我应该删除这个问题吗?谢谢。结果我的代码得到了错误的答案,即使我从2开始。知道我做错了什么吗?知道。你没有考虑到问题的所有要求,友好数组中有错误的元素,然后你就加起来产生错误的答案。检查这些元件,您将找到问题所在。