Hallo,
nachdem ich mir bereits die letzten Tage etwas den Kopf zerbrochen hab, dachte ich mir, dass vielleicht jemand hier in der Gemeinschaft noch schlauer ist als ich. Ganz kurz zum Thema: Es gilt einen Java-Algorithmus zu entwickeln, der ein mathematisches Problem löst; und das so schnell wie möglich.
Folgendes Problem wird betrachtet:
Man nehme eine Zahl a aus den Stellen ab, die folgende Eigenschaft erfüllt: a^a + b^b = ab. In anderen Worten: Die Summe aller Ziffern mit sich selbst potenziert ergibt wieder unsere ursprüngliche Zahl. Folgendes definieren wir außerdem: 0^0 = 0.
Neben der Zahl 1 gibt es noch die Zahl 3435, die diese Eigenschaften erfüllt sowie noch eine weitere Zahl. Wir brauchen also einen Algorithmus, der per Schleife von 1 anfängt (von mir aus auch 3436) und uns die dritte (und letzte existierende) Zahl, die das erfüllt ausgibt.
Soviel vorne weg: Ich habe einen Algorithmus, der aber relativ langsam ist (55 Sekunden auf einem zentralen Testserver, auf dem ich den Code auf Geschwindigkeit prüfe). Leute behaupten, das ganze in 4-5 Sekunden hinzukriegen. Da die Zahl im mittleren neunstelligen Bereich liegt, haben wir also milliarden Rechenoperationen - Ziel muss es daher sein, Zahlen, die es aus irgendwelchen Mathematischen Gründen nicht sein können, so schnell wie möglich auszuschließen.
Sollte jemand zufällig zu viel Zeit haben, würde ich doch sehr darum bitten, sich darüber mal etwas Gedanken zu machen, einen groben Code zu schreiben, die Zahl (die ich euch von mir aus auch nennen kann) zu finden und danach das Ganze auf Geschwindigkeit zu optimieren.
Wer irgendwas hinkriegt, was auf meiner zentralen Testmaschine in weniger als 10 Sekunden läuft und tatsächlich erstmal alle Zahlen irgendwie ansieht, bekommt...uhm...überleg ich mir dann.
Benutzt werden darf: Grundrechenarten, Schleifen, break/continue, Bitoperationen, IF-Abfragen. Kein Multithreading/SuperCheat/Weißichwas