美文网首页
一个比较高效的求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以内的质数的方法

    用ruby自带的库求的话,更简单 对比一下: 结果: n = 10000000时,也没有超过3秒。n = 1000...

  • 求1000以内的质数

  • ruby中对质数的操作

    上面的方法是返回一个数组(给出一个n,然后返回n以内的所有质数) 然后如果想简单的话。。。。用下面的 Prime的...

  • Dart 求100以内的质数

    //2、求100以内的质数 (质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。) var...

  • 循环题|求第n小的质数

    描述 输入一个正整数n,求第n小的质数。 输入 一个不超过10000的正整数n。 输出 第n小的质数。 样例输入 ...

  • Python3.x | 练习集

    1、一行解决杨辉三角 2、求最大质数值 给定一个n值,求小于等于n的最大的一个质数 3、假设没有 float() ...

  • 计数质数

    统计所有小于非负整数 n 的质数的数量。 示例: 思路 这道题给定一个非负数n,让我们求小于n的质数的个数,题目中...

  • 【js】小作业质数运算

    1.求100以内的质数 for(vari=2;i<=100;i++){ ///看看i是不是质数,拿出一个数一直除到...

  • 判断质数的方式

    1. 给定一个数 num,求[0, num]内的质数 思路 如果一个数是非质数,那么它的n被也一定是非质数

  • Java实现输出100000以内的质(素)数及算法结构优化

    输出100000以内的所有质数 质数:也叫素数,只能被1和他本身整除的自然数 最小的质数:2 方法一:效率很低 输...

网友评论

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

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