在Ruby中重置循环,或返回循环开始? (查找数字的因素)

时间:2010-08-27 08:20:43

标签: ruby loops

我试图找到数字N的因子。我希望能够遍历我的素数数组,并且当条件满足时,返回到迭代的开始,而不是继续。< / p>

arrFactors = []    
N = 150
[2,3,5,7,11].each do |a|
  if N % a == 0
    arrFactors.push(a)
    N = N/a
    break if N == 1
    <return to start of the collection [2,3,5,7,11]>
  end
end

我如何在Ruby 1.8.6中执行此操作? (我注意到1.8.7中有一个“循环”枚举器可能会相关吗?)

P.S
我知道下面的算法还不完善(我想我需要提供N = 1)。我也知道Ruby提供了一种保理方法,但我不想使用'因为我在这里学习。

4 个答案:

答案 0 :(得分:2)

你可以使用类似的东西:

[2,3,5,7,11].each do |a|

  while N % a == 0
    arrFactors.push(a)
    N = N/a
  end

  if N == 1 then
    break
  end

end

这将消除重置外循环的需要。

答案 1 :(得分:2)

您可以考虑使用Array.each方法,而不是使用Array.select方法。此方法接受一个块,并返回一个只包含与您的逻辑匹配的项的新数组。如果您的块返回true,那么该项将包含在结果集中。以下代码使用select方法并执行您要查找的内容:

[2,3,5,7,11].select do |a|
  if N % a == 0
    N = N/a
    break if N == 1
    return true
  end
  return false
end

可以找到select方法的文档here

答案 2 :(得分:1)

“redo”重置循环循环的当前迭代。 “重试”将开始循环。 (哦,“N”是常数;应该是“n”。)

答案 3 :(得分:0)

你可以试试这个

n = 150
factors = [2,3,5,7,11]
arrFactors = []
factor_index = 0
  while ((factors.size > factor_index + 1) || n > 1) do
    factors.each_with_index { |f, i|      
      factor_index = i
      if (n % f) == 0
        arrFactors.push(f)
        n = n / f 
        break
      end
    }
  end
puts n
puts arrFactors