Ruby素数和

时间:2017-07-11 10:42:43

标签: ruby

我试图取n个第一个素数的总和。我找到了显示前100个的方法,但我不知道如何摆脱1以及如何与数字相加。我正考虑将它们存储到一个数组中,但我无法理解它。

num = 1
last = 100

while (num <= last)
  condition = true
  x = 2
  while (x <= num / 2)
    if (num % x == 0)
      condition = false
      break
    end 
    x = x + 1  
  end
  primes = [] # Here

  if condition     
    puts num.to_s
    primes << num.to_s  # Here
  end
  num = num + 1
end

puts primes.inject(:+) # Here

基于我从你们所说的内容中得到的理解,我添加了这些行(评论# Here)。它仍然不打印它们的总和。我的意思是摆脱1是我知道1不被认为是素数,我不知道如何在没有1的情况下实现它。非常感谢你们的时间和答案,请理解我是刚开始研究这个。

2 个答案:

答案 0 :(得分:0)

如果您想要一起添加数字列表,可以使用以下内容:

list_of_prime_numbers.inject(0) {|total,prime| total + prime}

这将获取数字列表,并将它们逐个添加到注入循环(total)的累加器(.inject(0))中,并将其添加到当前数字({{ 1}})然后返回总数,然后在下一次迭代中成为prime的值。

我不太清楚你的意思:

  

我不知道如何摆脱1

但如果你的意思是不使用第一个数字(从0开始的素数列表中为1)

然后你可以这样做:

total

除了第一个但不包括数组的长度

之外,哪个数字只会得到所有数字

并且为了将数字输入到数组中,您可以将其推入数组中,如下所示:

list_of_prime_numbers[1...list_of_prime_numbers.length].
  inject(0) {|total,prime| total + prime}

答案 1 :(得分:-1)

您可以在ruby中使用Prime Enumerable

require 'prime'

((1..100).select { |number| Prime.prime?(number) }).inject(:+)

OR

Prime.each(100).inject(:+)

希望这有帮助。

相关问题