使用Array方法的素数列表

dem*_*mas 1 ruby

我有一个代码来获取素数列表:

def primes_numbers num
    primes = [2]

    3.step(Math.sqrt(num) + 1, 2) do |i|
        is_prime = true     

        primes.each do |p|   # (here)
            if (p > Math.sqrt(i) + 1)
                break
            end

            if (i % p == 0)
                is_prime = false
                break
            end
        end

        if is_prime
            primes << i
        end     
    end

    primes
end
Run Code Online (Sandbox Code Playgroud)

是否可以使用Array方法重写代码(选择,收集等等)?就像是:

s = (3..n)
s.select { |x| x % 2 == 1}.select{ |x| ..... }
Run Code Online (Sandbox Code Playgroud)

问题是我需要在select方法中迭代结果数组(注释'here').

Mic*_*ohl 8

Ruby 1.9有一个非常好的Prime类:

http://www.ruby-doc.org/core-1.9/classes/Prime.html

但我假设你不关心任何标准类,但想看一些代码,所以我们走了:

>> n = 100 #=> 100
>> s = (2..n) #=> 2..100
>> s.select { |num| (2..Math.sqrt(num)).none? { |d| (num % d).zero? }} 
#=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
Run Code Online (Sandbox Code Playgroud)

注意:我这样编写它是因为你想要Enumerable方法,为了提高效率,你可能想要读取素数查找方法.