先日解いた問題2[Ruby]

2問めは、「2から1000までの正の素数の出力」という出題

思ったやつを再度書いてみたが結果が特に出力されない
エラーはでないのだが、出力されない原因はわからない

i = 2
arr = []
while i >= 1000
  (2..1000).each do |p|
    if i % p == 0
      arr.push(p)
    end
  end
  if arr.length == 1
    puts i
  end
 i = i + 1
end

上記のような記述をした

  • iは判定する数値
  • pはiを割る数値
  • 2から1000なのでiが1000になるまで繰り返し
  • 2から1000のpでiを割り、割り切れた場合は配列に格納する
  • 配列の要素数が1つだった場合が素数であるとし、出力する

全くスマートじゃない
苦し紛れに書いた

どうやらwhileはtrueのときに繰り返し実行される模様
そのため思ったような出力がされないようである

for文で書き直してみる

for i in 2..1000 do
  arr = []
  (2..1000).each do |p|
    if i % p == 0
      arr.push(p)
    end
  end
  if arr.length == 1
    puts i
  end
end

for文だとそれっぽいのが出力された
999回の処理を999回やる処理

非常に勉強不足であることがわかるコードである
勉強して書き直したい