質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

2180閲覧

素数判断

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/01/28 09:58

forループを使った素数判定のアルゴリズムがわからないです。neはnの平方根を超えない最大の整数です。 forループの中は、n を 2 から始まって ne までの数で割った,その余りが 0 であるかどうか を調べます。

n = ARGV[0].to_i
ne = sqrt(n).to_i
pflag = true
for i in 2 .. n
r = n % ne
if r == 0 then
pflag = false
end
end
if pflag then
puts"#{n}は素数です。"
else
puts"#{n}は合成数です。"
end

回答お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

日本語で書いている部分は合ってますので、日本語の通り、プログラムを書いてください。

どこが違っているか分からない場合は、プログラムを日本語に直しながら音読するのが良いかと。
それと質問文の日本語を比べてください。

あと、sqrt(n)は、Math.sqrt(n)ですね。

投稿2016/01/28 13:34

otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「forループの中は、n を 2 から始まって ne までの数で割った」とありますので、i の値が 2 から始まって ne で終わるようにプログラムを書き換えてください。その後どうするかは、考えればきっとわかるはずです。

投稿2016/01/28 11:37

編集2016/01/28 11:40
tatsuya6502

総合スコア2035

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/01/28 12:14

回答ありがとうございます! n = ARGV[0].to_i ne = sqrt(n).to_i pflag = true for i in 2 .. ne r = n % ne if r == 0 then pflag = false end end if pflag then puts"#{n}は素数です。" else puts"#{n}は合成数です。" end これで書きなおして見たんですが、出力できないです。 何が間違っているかわかりません。
退会済みユーザー

退会済みユーザー

2016/01/28 13:19

n = ARGV[0].to_i ne = sqrt(n).to_i pflag = true for i in 2 .. ne r = n / i if r == 0 then pflag = false end end if pflag then puts"#{n}は素数です。" else puts"#{n}は合成数です。" end 上の様に、n を 2 から始まって ne までの数で割ることを考えましたが、出力できないです。 回答お願いします。
ozwk

2016/01/28 13:33

「出力できない」と「実行できない」は意味合いが違いますが、 どちらでしょうか もし、sqrtなんてないぞとエラーが出ているのであれば Math.sqrt()です。
退会済みユーザー

退会済みユーザー

2016/01/28 13:55

include Math n = ARGV[0].to_i ne = sqrt(n).to_i pflag = true for i in 2 .. ne if n / i == 0 then pflag = false end end if pflag then puts"#{n}は素数です。" else puts"#{n}は合成数です。" end このように考えたのですが、 実行してみたら、素数と合成数が逆に出てきます。
tatsuya6502

2016/01/28 14:12

あ、先ほどの引用が悪かったですね。「...で割った」ではなくて、原文の「...で割った,その余りが 0 で」で、やってみてください。
guest

0

すでに解決はしたとおもいますが、コード例を示します。

  • 素数判定部分を関数にしました。
  • 偶数なら素数ではないことをくみこみました。
  • 約数の判定は、奇数だけを試すようにしました。

ruby

1def prime?(n) 2 # 2 は素数 3 return true if n == 2 4 # 偶数なら素数ではない。 5 return false if n % 2 == 0 6 7 # 奇数で割っていく 8 3.step(Math.sqrt(n), 2).each do |i| 9 return false if n % i == 0 10 end 11 true 12end 13 14n = ARGV[0].to_i 15if prime?(n) 16 p = '素数' 17else 18 p = '合成数' 19end 20puts "#{n}#{p}です。"

投稿2016/01/28 22:15

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問