【发布时间】: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的 平方根 而不是一半来缩短这种蛮力尝试。
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 的 平方根 而不是一半来缩短这种蛮力尝试。
因为您从不输入您的each。如果值为 2,则(2..num/2) 变为(2..2/2),即(2..1)。 Ruby 的范围运算符不会倒退,因此没有什么可以“每个”重复。
【讨论】:
true 不是问题 :)
我相信由于 (num/2) 在这种情况下为 1,循环永远不会运行,因此它会落入底部的“真”。
【讨论】:
我认为你的方法是有效:
puts prime?(2)
#=> true
正如cmets中有人提到的,你也可以只通过号码的sqrt来节省一些步骤:
(2..Math.sqrt(num)).each do |x|
【讨论】: