• 締切済み

素数のみの足し算

よろしくお願いします。 只今、Javaで4~100までの間の偶数のみを素数を足して表現するというプログラムを書いています。 具体的には、 4=2+2 6=3+3 8=3+5 10=5+5 という感じで100まで表示させたいと思っています。 IF文とfor文のみで書きたいと思っています。 どうかよろしくお願いします。

みんなの回答

回答No.3

/*===========PrimesPair.java===============*/ class PrimesPair{ /* VB.NET用に作ったものを手作業でJavaに脳内変換した。 バグがあるかも。 Redim Preserve相当句を調べるのが面倒くさいので、配列は不要なまでにたっぷり確保。 ただし、もちろん素数の数がこれを超えるようだとエラーが出ると思う。 */ private int[] Primes = new int[600]; private int Current; private int N; public PrimesPair() { N = 100; } public PrimesPair(int max){ N = max; } public void ListOfPrimesInitialize(){ boolean IsPrime = true; Current = 0; Primes[0] = 2; for(int i=3;i<=N;i++){ IsPrime = true; for(int j= 2;j<=i-1;j++){ if (i % j == 0){ IsPrime = false; break; } } if(IsPrime == true){ Primes[Current + 1] = i; Current = Current + 1; } } } public void SearchPair(){ int pseudoPairNumber = 0; int PairNumber = 0; boolean IsPair = false; for(int i = 4;i<=N;i=i+2){ /* i=i+2をi=i+1にすると、「4以上の偶数」でなく「4以上の自然数」になる。 このときの出力についても考えたので和が11となる二つの自然数が存在しないことがわかる */ pseudoPairNumber = 0; PairNumber = 0; IsPair = false; for(int j = 0;j<=Current;j++){ pseudoPairNumber = i - Primes[j]; for(int k = 0;k<=Current;k++){ if(pseudoPairNumber == Primes[k]){ PairNumber = pseudoPairNumber; IsPair = true; break; } } if(IsPair == true){ System.out.println(Integer.toString(i) + " = " + Integer.toString(Primes[j]) + " + " + Integer.toString(PairNumber)); break; } } if(IsPair == false){ System.out.println("和が" + Integer.toString(i) + "となる二つの素数は存在しない"); } } } } /*===========PrimesMain.java===============*/ class PrimesMain{ public static void main(String[] args){ PrimesPair primes; if (args.length > 0){ primes = new PrimesPair(Integer.parseInt(args[0])); }else { primes = new PrimesPair(); } primes.ListOfPrimesInitialize(); primes.SearchPair(); } } ============================= C:\Data\Administrator\Oshiete_Goo\Q3020004\JavaPrimes>javac PrimesPair.java C:\Data\Administrator\Oshiete_Goo\Q3020004\JavaPrimes>javac PrimesMain.java C:\Data\Administrator\Oshiete_Goo\Q3020004\JavaPrimes>java PrimesMain 100 4 = 2 + 2 6 = 3 + 3 8 = 3 + 5 10 = 3 + 7 12 = 5 + 7 14 = 3 + 11 16 = 3 + 13 18 = 5 + 13 20 = 3 + 17 22 = 3 + 19 24 = 5 + 19 26 = 3 + 23 28 = 5 + 23 30 = 7 + 23 32 = 3 + 29 34 = 3 + 31 36 = 5 + 31 38 = 7 + 31 40 = 3 + 37 42 = 5 + 37 44 = 3 + 41 46 = 3 + 43 48 = 5 + 43 50 = 3 + 47 52 = 5 + 47 54 = 7 + 47 56 = 3 + 53 58 = 5 + 53 60 = 7 + 53 62 = 3 + 59 64 = 3 + 61 66 = 5 + 61 68 = 7 + 61 70 = 3 + 67 72 = 5 + 67 74 = 3 + 71 76 = 3 + 73 78 = 5 + 73 80 = 7 + 73 82 = 3 + 79 84 = 5 + 79 86 = 3 + 83 88 = 5 + 83 90 = 7 + 83 92 = 3 + 89 94 = 5 + 89 96 = 7 + 89 98 = 19 + 79 100 = 3 + 97 ========================== たぶんなんかどっかにバグあるでしょうし、今後識者によるより良いソースが出ると思ってます。 考えるのが面倒くさかったので素数最初に全部求めてストックしちゃいました。

mismoon
質問者

お礼

ありがとうございました。 参考にさせていただきました。

全文を見る
すると、全ての回答が全文表示されます。
  • PED02744
  • ベストアンサー率40% (157/390)
回答No.2

>どうかよろしくお願いします なにを、よろしくお願いなのでしょう? 1から全部作って欲しいということでしょうか? 「ここまで作ったが動かないので教えて」程度までできてないと、 まともな回答は付かないんじゃないでしょうか。

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

質問を考える前に補足要求させてもらうよ 素数だけの足し算って話なら 6 = 2 + 2 + 2 とか 10 = 7 + 3 ってのも立派に成立するんだけど、それらはどうするの?

mismoon
質問者

お礼

いろいろと至らない点がありすいませんでした。 今後は、気をつけていきたいと思います。 ありがとうございました。

mismoon
質問者

補足

すいませんでした。 これはゴールドバッハの予想(4以上の任意の偶数は、二つの素数の和で表すことができる )という定義にそって作るプログラムです。 なお、一つの偶数に二つの答えがでてきてしまう場合もありますが、どちらか一方のみの足し算で大丈夫です。 10を例にするなら、5+5 , 3+7のどちららか一方のみで大丈夫です。

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

関連するQ&A

  • 初心者です。for文、if文を使って10進数を2進数に変換したいです。

    入力された10進数の数値を2進数に変換する、プログラムを教えてください。 仕様がありまして、2進数を求めるには、入力された10進数の数値を、for文とif文を使用し商が0になるまで2で割り、2進数の値を求め、表示させなければいけません。 ご教授お願いいたします。

  • 自然数の和のプログラム

    if-else文とwhile文とfor文と1次元配列、このすべての条件を使って自然数の和を求めるプログラムを作りたいんですけど、これらの条件全てを使ってプログラムを作ることができません。 よろしければ教えてください。

  • 独習C 素数テスタ・・・分からない

    忙しい中失礼します。 ”素数”を確認するプログラムについて質問があります。 現在独習Cを用いて勉強中なのですが、下記のプログラム理解に苦しんでいます。 宜しければアドバイスを下さい。 下記のプログラム/*素数テスタ*/内から、 質問(1)部:for(; num <=1; )の意味は’1’よりも大きな数字を入れれば、for文のループを抜ける→この考えで合っている、と自分では思っていますが、間違っているのでしょうか? ご指摘願います。 質問(2)部: 1.num=5の場合、for ( i=2; i <= num / 2; i = i+1) → i <= num / 2はi <= 2となる。→i <= 2となり、for文のループを抜ける。→ if ((num % i) == 0) の条件は成り立たない。→ is_prime = 1のため、"素数です"と表示される。→納得! 2.num=9の場合、for ( i=2; i <= num / 2; i = i+1)→  i <= num / 2は i(=2) <= 4となり、 i = i+1の’i’部が’4’となった後for文のループを抜ける。→if ((num % i) == 0)はnum % iは 9%4で’1’余り、となり、if ((num % i) == 0) の条件は成り立たない。→is_prime == 1 の状態がキープされる。→"素数です"と表示される、と思いきや"素数ではありません"と表示される。 で、ここで何故"素数ではありません"と表示されるのかが分かりません。頭の中では’9’が素数ではないのは分かりますが、プログラムの中でどういう経路を辿り、"素数ではありません"と表示されるのでしょうか。その過程の説明を欲しています。 宜しければ、アドバイスを下さい。 /*素数テスタ*/ #include <stdio.h> int main(void) { int num = 0, i, is_prime; for(; num <=1; ){ //質問(1) printf("判定したい数を入力して下さい: "); scanf("%d", &num); } /*約数があるかどうかを調べる*/ is_prime = 1; for ( i=2; i <= num / 2; i = i+1) //質問(2) if ((num % i) == 0) //質問(2) is_prime = 0; //質問(2) if (is_prime == 1 ) printf("素数です"); else printf("素数ではありません"); return 0; }

  • 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プログラムの質問です

    1 3 5 7 9 11 13 15 17 19 21 23 のように10個ずつ改行し99までの奇数を表せるプログラムをお願いします。 できれば同じように100までの偶数を表示できるプログラムもお願いします。 for文を使ってお願いします。

    • ベストアンサー
    • Java
  • Javaと素数の判定について・・・

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

  • javaでif文を使ってわかりません

    javaでif文を使ってわかりません わからないのはキーボード入力で0なら「0です」と偶数・奇数ならそれぞれ偶数・奇数と表示するif文のプログラムです。 とりあえず import java.util.Scanner; public class OddEven2 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int str = sc.nextInt(); if(str==0) { System.out.println("0です"); } } } まではできました けど何億とある数字をキーボード入力で奇数なら奇数だけ表示させるとはどういうことでしょうか? 条件処理でこの値以上この値以下でなわけないし 糸口さえ掴めない状態です ヒントをいただけるとありがたいです

  • PHPで素数を表現に関するご質問

    PHPで素数を表現する際に関しての質問です。 ■知りたい点 下記のコードで、iが3の時、 for($j =3; $j < $i; $j++){ の $j < $i の動作の仕方がわかりません。 3 < 3 だから、条件に反する。よって処理なし? とか考えてしまっています。 どのような、解法をしているのでしょうか。 お手数をお掛けしますが、よろしくお願い致します。 P.S すみません。質問があいまいで答えずらいかと思います。。。 <?php //関数の呼び出し sosuu_check(); //素数を表示する関数 function sosuu_check() { //1~100までを繰り返す for($i=1;$i<=100;$i++) { //1以下の場合は次の値をチェックする if($i < 2) { continue; } //2の場合は素数なので表示して、次の値をチェックする。 if($i == 2) { print $i . ":"; continue; } //偶数の場合は素数ではないので、次の値をチェックする。 if($i % 2 == 0) { continue; } $flg = "0";//割り切れたか判定するフラグ変数 //今の値は1と今の値以外では割れてはいけない。 for($j = 3;$j < $i; $j++){ //割れてしまったら素数ではないので次の値をチェックする。 if($i % $j == 0){$flg = "1";break;} } //割れなかった場合は素数なので表示する。 if($flg == "0") { print $i . ":"; } } } ?>

    • ベストアンサー
    • PHP
  • 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
  • PHPで偶数と奇数を判断するには

    宜しくお願いします。 一覧表示等をする時に見やすいように一行ずつテーブルの色を変えたりすると思うのですが、これをPHPのfor文で自動的に交互に色を変えるようなプログラムを作ろうと思っております。for文で繰り返し処理場合、例えば、 for($n = 0; $n < 100; $n++) {  if($n = 偶数)  {  $bgcolor = "#ff0000";  }  elseif($n = 奇数)  {  $bgcolor = "#0000ff";  } } といった形で交互に色を変るには、偶数/奇数の判断が出来ないと無理だと思うのですが、何か良い方法は無いでしょうか?

    • ベストアンサー
    • PHP
新しい無線LAN設定に関する質問
このQ&Aのポイント
  • 新しいパソコンを購入し、ネットワーク環境も変更したため、新しいパソコンにMFC-J6570CDNプリンターを無線LANで接続しようとしていますが、解凍できない問題が発生しています。
  • お使いの環境はWindows10であり、MFC-J6570CDNプリンターとは無線LANで接続されています。
  • Wi-Fiルーターはソフトバンク光を使用しており、電話回線はひかり回線を利用しています。
回答を見る