这个Ruby代码确定数字是否为素数有什么问题?

时间:2014-05-02 20:40:41

标签: ruby algorithm

我正在"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)

1 个答案:

答案 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