【问题标题】:Why does the modulo formula to determine what are not prime numbers work for the prime number 2?为什么确定什么不是素数的模数公式适用于素数 2?
【发布时间】:2017-11-11 22:33:25
【问题描述】:
def prime?(num)
  return false if num == 1
  (2..num/2).each do |x|
    if num%x==0
      return false
    end
  end
  true
end  

【问题讨论】:

  • 对于它的价值,您可以通过提高 num平方根 而不是一半来缩短这种蛮力尝试。

标签: ruby primes


【解决方案1】:

因为您从不输入您的each。如果值为 2,则(2..num/2) 变为(2..2/2),即(2..1)。 Ruby 的范围运算符不会倒退,因此没有什么可以“每个”重复。

【讨论】:

  • 好消息是 2 一个素数,所以返回 true 不是问题 :)
【解决方案2】:

我相信由于 (num/2) 在这种情况下为 1,循环永远不会运行,因此它会落入底部的“真”。

【讨论】:

    【解决方案3】:

    我认为你的方法有效:

    puts prime?(2)
    #=> true
    

    正如cmets中有人提到的,你也可以只通过号码的sqrt来节省一些步骤:

    (2..Math.sqrt(num)).each do |x|
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      相关资源
      最近更新 更多