gpt4 book ai didi

ruby - 需要帮助理解 "(2..Math.sqrt(n)).none?"在对数字以下的素数求和的方法中的含义

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:34 25 4
gpt4 key购买 nike

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)).none?”。它到底是做什么的?

来自 ruby​​ 指南,.none?将集合中的每个元素传递给给定的 block 。如果 block 从不为所有元素返回 true,则该方法返回 true。如果没有给出 block ,则没有?仅当所有集合成员都不为真时才会返回真。

我不太明白,谁能解释一下?

最佳答案

让我改写一下:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com