• 締切済み

Javaと素数の判定について・・・

Javaのプログラミングで、素数の判定をfor構文とif構文だけで、どうやったら作れるものでしょうか。教えてください。。

みんなの回答

  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.6

もう答が出ているようなので、こまかい注意だけ述べます。 因数の候補を作るときに(直前の数+1)は感心しません。2以外に偶数の素数はないわけですから、4,6,8‥は飛ばします。 また、3の倍数を飛ばすためには、+2、+4、+2、+4 とすべきでしょう。 なお、√Nより大きい数は試す必要がない、ということも盛り込むべきです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.5

>breakというのは、初めて聞くのですが・・・ break とはループをそこで強制終了させるための命令です。 以下の例では n=0,1,2,3,4.....999 までループするはずですが 途中で処理を打ち切る必要がある条件が成立したとすると n は 999 に達する前にループを抜け出します。 例) int n = 0; if(n = 0; n < 1000; n++) {  // ... 何らかの処理  if(何らかの終了条件が成立) {   break;  } } またループが二重になっている場合は内側のループを脱出します。 以下の場合(2)のループを抜け出す場合があるということです。 jは0~99まで必ずループしますが kは50~99を全部ループする場合もあれば途中で終わる場合もあります。 for(int j=0; j<100; j++) { // (1)  for(int k=50; k<100; k++) { // (2)   if(何かの条件) {    break;   }  } } >これにそのbreak構文というのを挿入すれば完成でしょうか・・ んー。もう少し足りないですね。 >else if (k%m !=0) System.out.println("素数である"); これだと前回説明したように 全部の数で割れるかどうかの判定を行う前に結果を表示しているのでまずいですね。 こんな感じにしてみたらいかがでしょう。 for ( ;k<=n ;k++){  boolean isSosu = true; // フラグを使って              // その数が素数であると仮設定します  for (;m<=(n-1) ;m++) {      // ここで素数かどうか判定   // 素数でないことが判明したら   // isSosu = false; に設定して break;  }  // 内側のループが終わった、  // ここで結果を判定、表示します。  // if文でフラグを判定 } もうひとつ。 println ですけれど…「何が」素数か素数でないのかがわからないので println(k + "は素数である"); println(k + "は素数ではない"); とした方がいいでしょう。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

ちょっと間違えました。 >どれで割ってもあまりが出ない場合が「素数」ですので どれで割っても余りが出る場合が「素数」です。

全文を見る
すると、全ての回答が全文表示されます。
回答No.3

おおお。なかなかいいですね。 でも問題の箇所があります。 >for (;m<=(n-1) ;m++) for (m=2;m<=(n-1) ;m++) としないと k=3以降 を計算するときは m の値は増えたままですので おかしなことになります。m=2 にもどしてやる必要があります。 ついでに { もつけましょう。 >if (k%m ==0) System.out.println("素数ではない") ; break がないので、「素数ではない」が何度も何度も表示されてしまいます。 >else System.out.println("素数である"); たとえば 9 が素数であるかどうか判定する場合 2,3,4,5,6,7,8 までの数で割ってみて、どれで割っても あまりが出ない場合が「素数」ですので1回の割り算では判定できません。今のままのコードでは 9%2 を計算しただけで判定しているので「素数である」になってしまいます。なので 2~n-1 までの判定がすべて終わったあと、「素数である」は表示しないとなりません。 「素数でない」のは1回でも当てはまれば、そこで打ち切ればいいので break; します。

machidamax
質問者

お礼

おぉ!添削までしてくださるとは!多謝多謝です! breakというのは、初めて聞くのですが・・・よろしければ使い方を教えてくださいませんか? アドバイスの結果、このようなプログラミングになったのですが、これにそのbreak構文というのを挿入すれば完成でしょうか・・ int n=Integer.parseInt(args[0]); int k=2; int m=2; for (;k<=n ;k++){ for (m=2;m<=(n-1) ;m++){ if (k%m ==0) System.out.println("素数ではない"); else if (k%m !=0) System.out.println("素数である"); }

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

課題か何かでしょうか? とりあえず、ベタな解き方でヒントだけ。 例えば1から1000のうちの数字の中から素数だけを抽出するとすると、 for 文で1から1000までループします。この時のループ値をNとします。二つ目のループで2からN-1までループします。この時のループ値をMとします。 NをMで割って、再びMを掛け算してみます。 元のNになれば割り切れたということ(ここでIF文を使う)なので、素数ではないのでループをブレイクします。二つ目のループで2~N-1まで繰り返しても割り切れなかった場合は素数ですので 画面にプリントします。 これをループ値Nで1~1000まで繰り返します。 割り切れるかどうかの判定に % を使えばif文の部分はもっと簡潔かもしれません。

machidamax
質問者

お礼

回答ありがとうございましたm(..)m大変参考になります。 n/(1~(n-1))を行うわけですね。 つまり、こういう事でしょうか・・・  int n=Integer.parseInt(args[0]); int k=2; int m=2; for ( ;k<=n ;k++){ for (;m<=(n-1) ;m++) if (k%m ==0) System.out.println("素数ではない") ; else System.out.println("素数である");

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>素数の判定をfor構文とif構文だけで、どうやったら作れるものでしょうか。 まずはどうやって(どんなアルゴリズムで)素数を判定しようとしているか補足欄にどうぞ。 だいたい、for 構文と if 構文だけでは変数の宣言すらままならないと思いますが。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 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; } } --結果---------------------------------------------- 素数です

    • ベストアンサー
    • Java
  • java 素数判定

    入力した数字が整数か否かを判定するjavaプログラムを作っています。 以下の通りコンパイルして実行しました。これだと実行したときに どんな数字を数字を入力しても「31は素数です。 」となります。 入力した数字を判定させるにはどのようにしたらいいのでしょうか? class Sosuu { public static void main (String[] args) { int n = 31; boolean isPrime = true; for (int i = 2; i <= n - 1; i++) if (n % i == 0) { isPrime = false; break; } if (isPrime) System.out.println(n + " は素数です。"); else System.out.println(n + " は素数ではありません。"); } }

    • ベストアンサー
    • Java
  • javaで素数を探すプログラム。

    javaで素数を探すプログラム。 初歩的なことかと思いますが、助言をお願いします。 if(a[i-1]) ←この部分がわかりません。これはどのような条件がなのでしょうか? class Prime { public static void main(String[] args) { int max = 100; // 素数を探す数の最大値 boolean[] a = new boolean[max]; // 素数かどうか判定する配列 // 配列の初期化 for(int i = 0; i < max; i++) a[i] = true; // 素数かどうか判定 for(int i = 2; i < max; i++) { if(a[i-1]) { for(int j = 2; i*j <= max; j++) a[i * j - 1] = false; } else continue; } // 結果を表示 for(int i = 1; i < max; i++) { if(a[i]) System.out.print((i + 1) + " "); } System.out.println(); } } このプログラム

    • ベストアンサー
    • Java
  • 素数の個数を求めるプログラミング

    javaでプログラミングを学んでいるのですが 10000から20000までの整数のうち素数の個数を求めるプログラミングを製作しているのですがうまくいきません。 反復判定でwhileを使うと思うのですが・・・ 詳しいかた 正しいソースをお教えください。 よろしくお願いします。

  • javaでの文字判定

    javaにおいて16進数文字判定はどのようにするのでしょうか? 例えばString文字列が16進数文字0-9,a-f,A-Fで構成されているかどうかを 判定するにはどのようにすれば良いのでしょうか? このString文字列の長さは事前には分からず、数文字かもしれないし 数百文字かもしれません c言語の場合だとchar配列xyz[]があって中身が"1234abc"の場合 isxdigit()を使ってループでisxdigit( xyz[i] )として1文字づつ判定しNUL文字が 出現すれば終了となるわけですがjavaの場合だとどうするのでしょう? Stringの場合、byte[]の場合、char[]の場合それぞれ教えてもらえると助かります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのプログラミングについて

    Javaのプログラミングについて質問です。現在、プログラミングの基礎を勉強しておます。 □□□□■□□□□ □□□■■■□□□ □□■■■■■□□ □■■■■■■■□ ■■■■■■■■■ □■■■■■■■□ □□■■■■■□□ □□□■■■□□□ □□□□■□□□ □ のfor文とif文を利用して作成するという問題なんですが全くわかりません。どうしたらよいでしょうか?ひし形の右側には全角スペースがあります。

  • 素数判定の繰返し

    繰返し素数判定を行ない、CtrlーDで終了するプログラムをつくっています。 まず繰返しなしの素数判定プログラムを作り #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } return(0); } これはちゃんとできたのですがそれを繰り返すことができません。 #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); while((a=getchar())!=EOF){ if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } printf("自然数を入力:"); scanf("%d",&a); } printf("プログラムを終了します。\n"); return(0); } これは訳わからないことになっちゃいます。。。 どうしたらいいんでしょうか??

  • Javaでboolean型を使ってのうるう年の判定

    自分の練習で、JavaでC言語のgmtime関数を作成しています。それで、できるだけソースをきれいに書こうと思い、if文で繰り返すのではなく、boolean型を使ってうるう年の判定をする部分を作りたいのですが、どう書くか思いつきません。どのように書けばよいか教えていただけませんか?

  • Javaでブラウザ判定

    Javaでブラウザの判定を行いたいのですが 何かありますでしょうか? なにぶん初心者なもので どうしたらいいか検討もつきません。 JavaScriptでの判定方法は navigator.appNameなどで出来るみたいですが JavaScriptではなく Javaで出来るかどうか探しているのですが 分かる方がいらっしゃいましたら ご教授下さい。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 素数を判定するプログラム

    整数をひとつ入力して、それが素数かどうかを判定するプログラムを作ったのですが、素数でないものを入力しても「素数です」といわれます。 どうもfor文が評価されていないような気がしますが、原因がわかりません。 // homework4.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 #include <stdio.h> int main(int argc, char* argv[]) { int number; int n = 2; int i; printf("1より大きい整数を入力してください: "); scanf("%d",&number); while (number <= 1) { printf("1より大きい整数を入力してください: "); scanf("%d",&number); } if (number == 2) { printf("%dは素数です\n",number); goto OUT; } else { for (; n == number - 1; n++) { i = number % n; if (i == 0) printf("%dは素数ではありません\n", number); if (i == 0) goto OUT; } } printf("%dは素数です\n", number); OUT: return 0; } どうかよろしくお願いします。