使用 Array 方法的素数列表 [英] List of prime numbers using Array methods

查看:51
本文介绍了使用 Array 方法的素数列表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a code to get list of prime numbers:

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

是否可以使用数组方法(选择、收集等...)重写代码?类似的东西:

Is it possible rewrite code using Array methods (select, collect and so on...)? Something like:

s = (3..n)
s.select { |x| x % 2 == 1}.select{ |x| ..... }

问题是我需要在 select 方法中遍历结果数组(注释此处").

The problem is that I need to iterate throught result array (comment 'here') in the select method.

推荐答案

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

Ruby 1.9 has a very nice Prime class:

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

但我假设您不关心任何标准类,但想查看一些代码,所以我们开始:

But I'm assuming you don't care about any standard classes, but want to see some code, so here we go:

>> 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]

注意:我这样写是因为你想要 Enumerable 方法,为了效率起见,你可能想阅读主要的查找方法.

Note: I wrote it this way because you wanted Enumerable methods, for efficiency's sake you probably want to read up on prime finding methods.

这篇关于使用 Array 方法的素数列表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆