美文网首页
一个比较高效的求n以内的质数的方法

一个比较高效的求n以内的质数的方法

作者: kamionayuki | 来源:发表于2017-02-16 20:56 被阅读144次
    def find_prime(n)
      numbers = []
      
      for i in 2..n
        numbers[i] = i
      end
    
      for i in 2..Math.sqrt(n)
        #next unless numbers[i]
        (i*i).step(n,i) do |j|
          numbers[j] = nil
        end
      end
    
      numbers.compact!
    end
    

    用ruby自带的库求的话,更简单

    require 'prime'
    Prime.take_while {|e| e < n}
    

    对比一下:

    n = 10000000
    Benchmark.bm(10) do |t|
      t.report("find_prime") { find_prime(n) }
      t.report("Prime") {Prime.take_while {|e| e < n}}
    end
    

    结果:

                     user     system      total        real
    find_prime   2.465000   0.078000   2.543000 (  2.562321)
    Prime        1.326000   0.031000   1.357000 (  1.373573)
    

    n = 10000000时,也没有超过3秒。
    n = 1000000时,结果如下:

                     user     system      total        real
    find_prime   0.203000   0.031000   0.234000 (  0.239333)
    Prime        0.187000   0.000000   0.187000 (  0.185985)
    

    还是很可观的。

    在可以用自带库的情况下,最好用自带的库,如果不能用,用这个方法效率也是不错。

    相关文章

      网友评论

          本文标题:一个比较高效的求n以内的质数的方法

          本文链接:https://www.haomeiwen.com/subject/sxwhwttx.html