一回も披露したことのない豆知識

rubyで1から1000までの数字の内、素数のみを出力するプログラムを作ってたいです。
なお、pirmeライブラリを使用せず実装したいです。
もしよければ回答のコードについての詳しい説明して頂ければありがたいです!

質問者からの補足コメント

  • 1行目は何をやって、2行は何をやってなどの詳しい説明があるとありがたいです!

      補足日時:2017/06/15 14:09
  • 学校の出された課題です。
    1から1000までの数字の内、素数のみを出力というだけです。pirmeライブラリを使わなくしたいです。
    実際にコードを書くとなるとどういう感じになるかわかりますか?rubyの初心者で説明など頂けるとありがたいです(>人<;)

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/06/15 15:38

A 回答 (3件)

解説をつけると以下のようになります。


1は素数ではありません。1と自分自身以外に割り切れる数を持たない数を素数といいます。
与えられた数をnumとすると、
numを2,3,4,5・・・・num-1の数で次々と割っていき、割りきれたら素数でないことになります。
数学的には、num-1まででなく、numの平方根まで行えばよいことが知られていますが、
今回は力ずくで、num-1まで行います。

def sosu()
(1..1000).each do |i| #iを1~1000まで繰り返す
if is_sosu(i) == true #iが素数なら印字
puts i
end
end
end
def is_sosu(num) #素数判定 素数ならtrue、以外はflaseを返す
if num == 1 #1は素数でないのでfalse
return false
end
(2..num-1).each do |x| #xを2から自分自身の数の1つ前まで繰り返す
if num % x == 0 #xで割り切れたなら(余りが0なら)それは、素数でない
return false
end
end
return true #結局xで割り切れなかったので素数である
end
sosu()
    • good
    • 2
この回答へのお礼

毎度ありがとうございます。すごく分かりやすいです。

お礼日時:2017/06/15 20:14

例えば


puts 2
puts 3
puts 5
(以下省略)
と 168行並べればいいです. さすがにこのプログラムで何をしているかは理解できるよね?
    • good
    • 1

なぜそのようなプログラムを作ってみようなどと思ったのでしょうか?



もっとも, 「1から1000までの数字の内、素数のみを出力する」というだけなら
2, 3, 5, ...
と用意しておいた数値を順次出力するだけでいいと思うんだよね.
この回答への補足あり
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!