私の入力はInteger
です。その値までは、すべての素数を見つけて5列に出力する必要があります。次に、整数を「素数分解」して結果を出力する必要があります。
それはうまくいきますが、遅すぎません...
public class Bsp07 {
public static void main(String[] args) {
System.out.println("Enter the upper bound for prime number search");
int n = SavitchIn.readLineInt();
int[] aZahlen = new int[n - 1];
for (int el = 0, zahl = 2; el != n - 1; el++, zahl++)
aZahlen[el] = zahl;
int p = 2, altesP; // next unmarked number
boolean aus = false; // when unmarked elements are "aus" (off)
while (aus == false) {
// marks Elements; using For loop since for-each loop doesn't work
for (int i = 0; i < aZahlen.length; i++) {
if ((aZahlen[i] % p == 0) && (aZahlen[i] != p))
aZahlen[i] = 0;
}
altesP = p; // merkt sich altes p
// update p, find next unmarked Element
for (int el : aZahlen) {
if ((el != 0) && (el > altesP)) {
p = el;
break;
}
}
// if p stayed the same unmarked elements are "aus" (off)
if (altesP == p)
aus = true;
}
int nervVar = 0;
for (int pr : aZahlen) {
if(pr==0)
continue;
System.out.print(pr + " ");
nervVar++;
if ((nervVar % 5 == 0)) System.out.print("\n");
}
/* Factorization */
System.out.print("\n" + n + " = ");
for (int i = 0, f = 0; n != 1; i++, f++) {
while(aZahlen[i]==0) i++;
/*
* If the prime divides: divide by it, print the prime,
* Counter for further continuous decrease with prime number if n = 1,
* Stop
*/
if (n % aZahlen[i] == 0) {
n /= aZahlen[i];
// So that the first time is not *
if (f != 0)
System.out.print(" * " + aZahlen[i]);
else
System.out.print(aZahlen[i]);
i--;
}
// So that f remains zero if no division by 2
else
f--;
}
System.out.println();
}
}
どこでリソースを節約できますか?ところで、今のところ配列しか使えません...ドイツ語のコメントでごめんなさい。本当に不要な長いループなどが目に入った場合
ありがとう!