• ベストアンサー

JAVAで素数判定

JAVAの勉強をしてます 練習問題で、素数判定のプログラムをしているのですが。 1~14までの判定はうまくいきますが、15の判定の時に素数であると表示されて困ってます。どなたかわかりませんか? //読み込んだ数字 n が 15 の場合 if(n == 1) System.out.println("素数ではありません。"); if(n == 2) System.out.println("素数です。"); for (int i = 2; i < n; i++) { if (n % i == 0) { System.out.println("素数ではありません。"); break; } else { System.out.println("素数です。"); break; } } --結果---------------------------------------------- 素数です

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.4

 簡単に直すには、判定と出力のロジックを分ければよいのです。  for分のところだけ boolean issosu = true; for (int i=2; i<n ; i++) {  if (n % i == 0) {   issosu = false;   break;  } } if (issosu) {  System.out.println("素数です。"); } else {  System.out.println("素数ではありません。"); }

pochi1234
質問者

お礼

ご回答ありがとうございます。 boolean型の変数まだ使ったことがなかったので、その方法は思いつきませんでした。 無事解決しました。

その他の回答 (3)

  • ushioni
  • ベストアンサー率24% (14/58)
回答No.3

if文の中が真だろうが偽だろうがbreakに行っちゃいますね。 for文が全てのiについて余りが0でなかったら"素数です"と表示するように直せば良さそうですね。

pochi1234
質問者

補足

ご回答ありがとうございます。 違いがわかりました、素数でないときにのみbreakで抜けれるようにしましたが、 結果だけを表示するにはどのようにしたらいいでしょうか。 if(n == 1) System.out.println("素数ではありません。"); if(n == 2) System.out.println("素数です。"); for (int i = 2; i < n; i++) { if (n % i == 0) { System.out.println("素数ではありません。"); break; } else { System.out.print(""); } } System.out.println("素数です。");

noname#94983
noname#94983
回答No.2

繰り返しのiで割ったあまりが0なら素数ではない、というのは正しい。が、逆に「あまりが0でなければ素数」ではない。 「すべての繰り返しで、あまりが0でない」場合が、素数だ。違いがわかるだろうか?

pochi1234
質問者

補足

ご回答ありがとうございます。 違いがわかりました、以下のように変更してみましたが、素数でないときはすぐにbreakで抜けれますが、 結果だけを表示するにはどのようにしたらいいでしょうか。 if(n == 1) System.out.println("素数ではありません。"); if(n == 2) System.out.println("素数です。"); for (int i = 2; i < n; i++) { if (n % i == 0) { System.out.println("素数ではありません。"); break; } else { System.out.print(""); } } System.out.println("素数です。");

noname#77845
noname#77845
回答No.1

このプログラムは、「9」の時も「素数です」と表示しませんか? (っていうか、3以上の奇数の時必ず「素数です」と表示しませんか?) for文の中のif文で真の時も偽の時もbreak文が付いているから、一回しか実行されない。つまり、2で割り切れるかどうかしか判定していない。 ちがってたら、ごめんね~!

pochi1234
質問者

お礼

ご回答ありがとうございます。 2で割り切れるかどうかしか判定していませんでした。 ループする前にbreakで抜けてようです。

関連するQ&A