【问题标题】:Prime Factorization in Ruby using Trial Division使用试除法在 Ruby 中进行素数分解
【发布时间】:2019-07-08 15:45:22
【问题描述】:

我是 Ruby 的新手。我过去确实有一些使用 python 的经验,但是最近当我重新开始编码时,我选择学习 Ruby。我正在开发一个需要找到数字的主要因素的程序,所以我创建了一种使用试除法的方法。然后当我尝试调用该方法时,我收到错误trial_division': undefined method `*' for nil:NilClass (NoMethodError)

我尝试在 while 循环中使用 break 而不是 end 并得到相同的结果。我不知道 ruby​​ 中的什么导致此方法无法被识别。

def trial_division(n)
  a = []
  while n % 2 == 0
    a.push(2)
    n /= 2
  f = 3
  end
  while f * f < n
      if n % f == 0
        a.push(f)
        n /= f
      else
        f += 2
      end
  end
  if n != 1
    a.push(n)
  end
puts a
end

我想让程序找到一个数的质因数并显示数组。

【问题讨论】:

    标签: ruby


    【解决方案1】:

    据我所知,有两个错误:f=3 行在 while 循环中,当 n 恰好是奇数时,导致 f 为 nil。 nil 没有* 方法,导致错误。

    同样while f*f&lt;n 失败 9, ;应该是while f*f &lt;= n。注意puts返回nil,所以整个方法返回nil。

    还有:https://ruby-doc.org/stdlib-2.6.3/libdoc/prime/rdoc/Prime.html#method-i-prime_division .(require "prime"; p 100.prime_division)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多