我想将numbers
数组传递给我的is_prime?
方法,如果数字有效则返回。我不想用:
require 'prime'
a = [1,2,3,4,5]
Hash[a.zip(a.map(&Prime.method(:prime?)))]
这是学习经历。我当前的代码只输出数组中的第一个数字。有人能帮助我理解我做错了什么吗?谢谢!
def is_prime?(*nums)
i = 2
nums.each do |num|
while i < num
is_divisible = ((num % i) == 0)
if is_divisible == false
x = "#{num}: is NOT a prime number." #false
else
x = "#{num}: is a prime number." #true
end
i +=1
end
return x
end
end
puts is_prime?(27,13,42)
答案 0 :(得分:3)
你回来了。
你方法中的一些错误:
def is_prime?(*nums)
nums.each do |num|
return false if num == 1
next if num == 2 # 2 is the only even prime
i = 2 # needs to be reset for each num
while i < num
return false if num % i == 0 # num is not prime
i += 1
end
end
true # We'll reach here only if all the numbers are prime
end
答案 1 :(得分:0)
这将以与您使用素数库相同的格式返回结果,其逻辑与您的自定义函数相同:
def is_prime?(*nums)
nums.each_with_object({}) do |num, hsh|
hsh[num] = num > 1 && 2.upto(num - 1).none? { |i| num % i == 0 }
end
end
puts is_prime?(27,13,42)
# => {27=>false, 13=>true, 42=>false}
既然你提到这只是为了学习,我假设你知道sieve比蛮力迭代更好的方法。
如果您想要解释上述代码的工作原理或进一步帮助理解您当前代码的原因,请在评论中告诉我。