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/

10-12 12:23
查看更多