1つだけ過去を変えられるとしたら?

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

A 回答 (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
==========================
たぶんなんかどっかにバグあるでしょうし、今後識者によるより良いソースが出ると思ってます。
考えるのが面倒くさかったので素数最初に全部求めてストックしちゃいました。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/06/26 00:02

>どうかよろしくお願いします



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

質問を考える前に補足要求させてもらうよ



素数だけの足し算って話なら
6 = 2 + 2 + 2
とか
10 = 7 + 3
ってのも立派に成立するんだけど、それらはどうするの?

この回答への補足

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

補足日時:2007/05/23 00:42
    • good
    • 1
この回答へのお礼

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

お礼日時:2007/06/26 00:01

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


おすすめ情報