语法错误,意外$ end,期待kEND

时间:2013-12-22 21:10:13

标签: ruby

array = []
prime_cap = 2_000_000
prime_nums=(1..prime_cap).map do |p|
  array = unless p % p-1.downto(1):0
end

我是ruby的新手,我不明白这个问题是什么,请你解释为什么当我尝试运行它时,它会说“无标题:5:语法错误,意外的$ end,期待kEND”。

1 个答案:

答案 0 :(得分:1)

你不能对枚举使用模运算,你必须迭代所有元素。

prime_nums = []
(2..2_000_000).each do |p|
    prime_nums << p if (p-1).downto(2).none?{ |n| p % n == 0 }
end

注意p-1周围的括号以及方法none?,它检查枚举的每个元素的条件并返回一个布尔值。 此外,我使用2而不是1来进行迭代,因为1不是素数。

也就是说,有更有效的算法来寻找素数。 例如,您可能希望使用http://en.wikipedia.org/wiki/Sieve_of_eratosthenes,或者您可以使用p的平方根而不是p-1开始检查。