質問文のコードを少し変更して動作するようにしてみました。
ruby
1numbers = []
2100.times do |n|
3 if n < 2
4 next
5 end
6
7 prime = true # <===
8 (2..n - 1).each do |x|
9 if n % x == 0
10 prime = false # <===
11 end
12 end
13 if prime # <===
14 numbers.push(n)
15 end
16end
17
18p numbers
<=== としてあるのが変更した行です。
このコードを、さらに変更したのが次のものです。
ruby
1# nが素数なら true を返す,そうでなければ false を返す。
2# (n は 2 以上であること)
3def prime?(n)
4 (2..n - 1).each do |x|
5 return false if n % x == 0
6 end
7 true
8end
9
10numbers = [2]
11(3..100).each do |n|
12 numbers.push(n) if prime?(n)
13end
14
15p numbers
どちらも実行結果は次のようになります。
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
もっと変更できる点はいろいろあります。
偶数は素数でないのはあきらかなので処理をスキップするとか、
割り算を試すのは n - 1 まででなく sqrt(n) までで十分だとか,
既にみつけた素数で割り算すれば十分だとか ...
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/15 14:12
2016/03/15 15:45 編集
2016/03/16 11:28
2016/03/16 15:22
2016/03/19 01:29