【问题标题】:Determing whether number is prime in Ruby确定数字是否在Ruby中是素数
【发布时间】:2016-09-27 16:32:38
【问题描述】:

我正在尝试编写一个方法,该方法根据被评估的整数是否为素数来返回真或假。下面的代码是我根据阅读 Wikipedia 文章、以前的 stackoverflow 答案等拼凑而成的。目前,该程序对素数返回 true,但不返回 false。我想在不使用任何内置函数的情况下做到这一点。我应该如何解决这个问题?

def prime?(integer)
 (2..integer - 1).each do |x|
  if (integer % x) == 0
   return false
  else
   return true
  end
end
end

【问题讨论】:

  • 注意:each、-、% 和 == 是内置函数。 :P
  • @amadan - 不要迂腐;你知道@TiantianShi 指的是像Prime 这样的库。

标签: ruby each primes


【解决方案1】:

你有一个逻辑问题。对于不能被 2 整除的任何数字,程序都会返回 true。因此,只需在循环完全执行后添加 return true 语句即可。

def prime?(integer)
    return false if integer < 2
    (2..integer - 1).each do |x|
        if (integer % x) == 0
            return false
        end
    end
    true
end

【讨论】:

  • 如果它不是质数,这个方法似乎仍然不会返回 false...我的质数检查是否也存在逻辑问题?
  • 我认为它不仅不适用于 1 和 0 的情况
【解决方案2】:

另一种选择,从设置为 true 的变量开始。

def prime?(integer)
  (2..integer - 1).each {|x| return false if (integer % x) == 0 }
  true
end

【讨论】:

  • val 可以设置为false,然后返回true。如果找到2 和integer-1 之间的因子,您只想返回false。如果没有这个因素,返回true。你不需要变量val。
  • 谢谢,反馈很好。
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 2011-06-09
  • 1970-01-01
  • 2015-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-06
相关资源
最近更新 更多