1

Ruby ループについて非常に基本的な質問があります。

このプログラムは、書かれているとおり、i 番目の素数 +1 を返します (つまり、この例では 17 を返す必要があります)。単純に を返すことができることはわかっcand-1ていますが、ループの最後で答えが見つかったかどうかを確認し、見つからwhileない場合にのみインクリメントする「Ruby の方法」について疑問に思っていました。

def ith_prime(i)
  pI = 0 # primes index
  divs = []
  cand = 2

  until pI == i do 
    if divs.find { |div| cand%div == 0 } == nil
        divs << cand
        pI += 1
    end
    cand += 1
  end
  cand
end

puts ith_prime(7)
> 18
4

1 に答える 1

5

loop代わりに、whileまたはuntilほとんどの場合使用します。このようにして、終了条件をループのどこにでも置くことができます。

私はそのように書きます(問題を正しく理解していれば):

def ith_prime(i)
  pI = 0 # primes index
  divs = []
  cand = 2

  loop do
    unless divs.find { |div| cand%div == 0 }
      divs << cand
      pI += 1
    end

    break if pI == i

    cand += 1
  end

  cand
end
于 2013-01-07T19:22:48.850 に答える