我正在"true"
def is_prime(n)
if (2..(n**0.5)).each {|i| n % i != 0}
puts "true"
else
puts "false"
end
end
is_prime(14)
答案 0 :(得分:5)
Cary Swoveland遇到了主要问题,但还有其他一些调整可能会让它更清洁/更有用。
def is_prime?(n)
(2..(n**0.5)).all? {|i| n % i != 0}
end
p is_prime? 14 # false
p is_prime? 17 # true
请注意在方法名称中添加问号。该方法现在返回可用的结果而不是打印。
如果你想提高性能,你可以单独测试均匀度,然后只迭代奇数3到sqrt(n),踩2来减少工作量:
def is_prime?(n)
if n.odd?
3.step(Math.sqrt(n).to_i, 2).all? {|i| n % i != 0}
else
false
end
end