首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby中的组合方法

Ruby中的组合方法
EN

Stack Overflow用户
提问于 2013-12-04 02:51:49
回答 2查看 402关注 0票数 1

为了加快我的程序速度,我尝试将这两种方法结合起来,但却遇到了最困难的时刻。以下是一些方法:

代码语言:javascript
复制
def prime?(number, array)
  array.each do |x|
    if number % x == 0
      return false
    end
  end
  true
end

def sum_prime_2(number)
  i = 0
  prime = 1
  output = [2]
  while prime < number
    if prime?(prime, output)
      i += 1
      output << prime if prime != 1
    end 
    prime += 2
  end
  output.inject(:+)
end

这是我想出来的,但效果不太好。我想要任何帮助。

代码语言:javascript
复制
def sum_prime(number)
  i = 0
  prime = 1
  output = [2]
  while prime < number
    if output.each { |x| prime % x == 0 } == true # prime? method
      output << prime if prime != 1
      i += 1
    end 
    prime += 2
  end
  output.inject(:+)
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-04 03:10:39

以下是您当前方法的简化:

代码语言:javascript
复制
def sum_primes(limit)
  primes = [2]
  n = 3
  while n < limit
    primes << n if primes.all? { |p| n % p != 0 }
    n += 2
  end
  primes.inject(:+)
end

但你可以做得更好。例如,没有必要检查所有先前素数的可分性--只到n的平方。更好的方法是筛,筛方法,特别是增量方法。

票数 2
EN

Stack Overflow用户

发布于 2013-12-04 03:28:00

我将实际使用这段代码,而不是将这两个函数组合在一起:

代码语言:javascript
复制
def prime?(number, array)
  array.each do |x|
    if number % x == 0
      return false
    end
    return true if x * x > number
  end
  true
end

sum_prime_2(100000)FMc的答案和我的答案做一个快速的基准测试,原始代码大约需要5.0秒,FMc需要6.5秒,但是我的版本只需0.1秒。

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

https://stackoverflow.com/questions/20365921

复制
相关文章

相似问题

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