【发布时间】:2015-08-06 21:23:18
【问题描述】:
我正在编写一个方法 - prime_numbers - 当传递一个数字 n 时,它返回 n 个素数。它不应该依赖 Ruby 的 Prime 类。它的行为应该是这样的:
prime_numbers 3
=> [2, 3, 5]
prime_numbers 5
=> [2, 3, 5, 7, 11]
我对这种方法的第一次尝试如下:
def prime_numbers(n)
primes = []
i = 2
while primes.length < n do
divisors = (2..9).to_a.select { |x| x != i }
primes << i if divisors.all? { |x| i % x != 0 }
i += 1
end
primes
end
编辑: 正如所指出的那样,当前的方法是错误的,因为它被限制为只考虑最多 9 的除数。因此,任何由两个大于 9 的相等素数组成的完全平方本身被视为素数。
如果有人有意见或建议可以分享更好的解决方法,我们将不胜感激。
【问题讨论】:
-
你的方法不正确。它只测试
2..9范围内的除数。那么数字 121(11 * 11)呢?根据您当前的实施,这是一个素数。