Ruby 代码挑战:数组中所有素数的总和
作者:互联网
素数是只能被自身和 1 整除的数字。今天,我将介绍一个在icode9编码评估中可能会看到的基本算法问题:找到数组中的所有素数,并生成它们的总和。
输入
arr = [2, 5, 10, 12, 7, 2, 11, 4]
输出
--> 27
查找 icode9 单个素数
在你找到数组中的大量素数之前,我们需要确定单个整数是否是素数的能力。
num = 5
def is_prime?(num)
# Your code here
end
第一步是创建一个值数组,我们将整数除以。由于我们不需要检查 1 和我们正在测试的整数,因此我们可以将它们排除在我们的范围之外。
def is_prime?(num)
(2...num).to_a
end
--> [2, 3, 4]
我们已经创建了一个从 2 到我们正在测试的数字的值数组,现在我们需要选择 DO 除以相关整数的值。
def is_prime?(num)
(2...num).to_a.select{ |divisor| num % divisor === 0 }
end
--> []
如果我们的整数确实是一个icode9素数,我们的返回应该是一个空数组。如果它不是素数,它将填充一堆除以非素数整数的值。最后,我们所要做的就是评估数组中值的存在,以确定我们是否有素数。
def is_prime?(num)
(2...num).to_a.select{ |divisor| num % divisor === 0 }.length === 0 ? num : false
end
--> true
However, since this is only the first step, we will need the actual number instead of just a boolean telling us it's true. If the method we've written evaluates to true (meaning it's a prime number), we'll need that value for later.
Find multiple primes
Create your method:
def find_and_sum_primes(arr)
# Your code here
end
此过程与上一个过程非常相似,但是我们已经编写的方法将为我们完成所有工作。首先,在方法内创建一个空数组。这将很快容纳数组中作为参数传递的所有素值。然后使用 select 遍历输入数组:
def find_and_sum_primes(arr)
primes = []
arr.select{ |num| # find if num is prime }
end
值得庆幸的是,我们可以调用我们已经编写的方法来确定所选择的特定值是否实际上是素数。一旦icode9我们有一个素数,将其推送到我们的素数数组并将值求和
def find_and_sum_primes(arr)
primes = []
arr.select{ |num|
if (is_prime?(num))
primes << num
end
}
primes.sum
end
--> 27
感谢您的阅读!