首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么primes的stdlib实现如此缓慢?

为什么primes的stdlib实现如此缓慢?
EN

Stack Overflow用户
提问于 2015-02-04 14:50:00
回答 2查看 95关注 0票数 1

为了好玩,我决定用ruby编写eratosthenes的筛子。只是为了好玩,因为我知道有一个库函数。此外,我认为它会很快。但我发现它不是,至少在我的ruby 1.9.3中,我的在我的上网本上的速度是我的上网本的几倍,甚至不是c。为什么会这样呢?

库实现:

代码语言:javascript
复制
require 'prime'
primes = Prime.each(1_000_000).to_a
print primes.size
puts

我用红宝石写的:

代码语言:javascript
复制
sieve = Array.new(1_000_000, true)
sieve[0..1] = [false, false]
for number in 2...Math.sqrt(sieve.size)
  if sieve[number]
    for multiple in (number ** 2...sieve.size).step(number)
      sieve[multiple] = false
    end
  end
end

primes = []
for number in 2...1_000_000
  if sieve[number]
    primes << number
  end
end
print primes.size
puts

这个库非常慢。

EN

回答 2

Stack Overflow用户

发布于 2015-02-04 15:11:44

primePrime.each(1_000_000).to_a生成1_000_000以下的所有质数。

您的方法实际上只生成1_000_000的平方根以下的所有质数,即1000

票数 2
EN

Stack Overflow用户

发布于 2015-02-04 15:26:52

a)在我的计算机上,库的执行时间为0.230秒,而您的实现平均为0.270秒。编辑:我是在MRI 2.2.0上执行的,而不是1.9.3。

b)更重要的是,MRI的库实现也是in Ruby的,而不是C。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28315150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档