使用** custom ** Ruby方法查找素数

时间:2013-12-09 19:32:40

标签: ruby

我想将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)

2 个答案:

答案 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比蛮力迭代更好的方法。

如果您想要解释上述代码的工作原理或进一步帮助理解您当前代码的原因,请在评论中告诉我。