def prime_sum_below(x)
primes = (2..x).select { |n| (2..Math.sqrt(n)).none? { |i| (n % i).zero? }}
sum = primes.inject { |sum, i| sum + i }
end
这个方法对x以下的素数求和。我理解有困难“(2..math.sqrt(n))。没有?”。它到底是做什么的?
从《红宝石指南》上看,没有?将集合的每个元素传递给给定的块如果块从不为所有元素返回true,则方法返回true如果没有给出块,就没有仅当集合成员中没有一个为true时才会返回true。
我不太明白,有人能澄清一下吗?
最佳答案
让我这样重新表述:
primes = (2..x).select do |n|
(2..Math.sqrt(n)).none? do |i|
(n % i).zero?
end
end
然后每一行:
# It selects a number if the following block returns true
primes = (2..x).select do |n|
# It takes all of the elements from 2 to the square root of n
(2..Math.sqrt(n))
# Then passes that into another block, returning true if none of the elements return true
.none? do |i|
# If it never divides evenly, then it returns true
(n % i).zero?
end
end
因此,如果
(n % i).zero?
返回true,则意味着某物进入n
,这意味着n
不能是质数关于ruby - 需要帮助来理解“(2..Math.sqrt(n))。none?”在将数字以下的质数求和的方法中的含义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22585500/