我试图取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的情况下实现它。非常感谢你们的时间和答案,请理解我是刚开始研究这个。
答案 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(:+)
希望这有帮助。