Aufgabe:
Die folgende sich wiederholende Folge ist definiert für die Menge der positiven ganzen Zahlen:
n → n/2 (n ist gerade)
n → 3n + 1 (n ist ungerade)
Wenn wir die Regeln oben benutzen und mit 13 beginnen, erhalten wir die folgende Folge:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
Es ist zu sehen, dass diese Folge (beginnend bei 13 und endend bei 1) 10 Glieder enthält. Obwohl es bisher nicht bewiesen wurde (Collatz-Problem), wird vermutet, dass alle Anfangszahlen bei 1 enden.
Welche Anfangszahl unter 1 Million erzeugt die längste Folge?
Weshalb gibt er mir 910107 aus ? irgendwas muss falsch laufen. Das richtige ergebnis ist 837799
Die folgende sich wiederholende Folge ist definiert für die Menge der positiven ganzen Zahlen:
n → n/2 (n ist gerade)
n → 3n + 1 (n ist ungerade)
Wenn wir die Regeln oben benutzen und mit 13 beginnen, erhalten wir die folgende Folge:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
Es ist zu sehen, dass diese Folge (beginnend bei 13 und endend bei 1) 10 Glieder enthält. Obwohl es bisher nicht bewiesen wurde (Collatz-Problem), wird vermutet, dass alle Anfangszahlen bei 1 enden.
Welche Anfangszahl unter 1 Million erzeugt die längste Folge?
Java:
package ProjectEuler14;
import java.math.BigInteger;
public class Main {
public static void main(String... args) {
System.out.printf("%1$d ", findTheNumberWithTheLongestCollatzFollow(1000000));
}
public static int findTheNumberWithTheLongestCollatzFollow(int limit) {
var value = 0;
var temp = 0;
for (var number = 3; number < limit; number++) {
if (getFactorLength(number) > temp) {
temp = getFactorLength(number);
value = number;
}
}
return value;
}
public static int getFactorLength(int number) {
var counter = 0;
while (number > 1) {
if (isEven(number)) {
number = number / 2;
counter++;
} else {
number = 3 * number + 1;
counter++;
}
}
return counter;
}
public static boolean isEven(int number) {
if (number % 2 == 0) {
return true;
} else return false;
}
}
Zuletzt bearbeitet: