Finde die kleinste positive Zahl, die genau doppelt so groß wird, wenn sich die letzte Ziffer(*) ganz nach vorne “drängelt” (also abcd -> dabc)
(*) nur für die Regelbieger: Im Zehnersystem
Finde die kleinste positive Zahl, die genau doppelt so groß wird, wenn sich die letzte Ziffer(*) ganz nach vorne “drängelt” (also abcd -> dabc)
(*) nur für die Regelbieger: Im Zehnersystem
0?
Ist das eine positive Zahl? Ist das eine natürliche Zahl? (Ist das überhaupt eine Zahl?) Das Doppelte von 0 ist 0.
Oder „muss“ ich IDE anmachen?
Nein, 0 ist nicht positiv. Wenn man die 0 mit einschließen will, wäre das “nicht-negativ”.
Und ich bezweifle, dass dir die IDE hier nutzt, wenn du brute force vorgehen willst…
SPIELWIESE! Ich wollte lediglich meine meinung kundtun.
Ne, erst mal werd’ ich noch nix probieren.
Im Sinne von http://abstrusegoose.com/210 muss man, wenn man es mal brute-force durchlaufen läßt und bis Integer.MAX_VALUE
nix findet, die Frage stellen: Gibt es diese Zahl? (Oder könnte die Lösung auch aus einem Beweis bestehen, dass es so eine Zahl nicht geben kann?)
Es gibt diese Zahl, aber sie ist größer als Integer.MAX_VALUE
. Und man kann sie trotzem mit Papier und Bleistift ermitteln.
Aber kleiner als Long.MAX_VALUE, nicht viel aber immerhin genug, dass man bei Brute-Force nicht auf BigInteger setzen müsste.
Wenn man davon ausgeht, dass die letzte Ziffer eine 1 ist, dann muss gelten
...1
+ ...1
= ...2
Dann muss, weil ja nur um 1 verschoben wird, aber auch
...21
+ ...21
= ...42
gelten. Demnach auch
...421
+ ...421
= ...842
und
...8421
+ ...8421
= ...6842
1
wobei die 1 der Übertrag ist. Es geht also weiter mit
...68421
+ ...68421
= ...36842
11
und aus jeder neuen Summe ergibt sich die Ziffer, die vorher addiert worden sein muss.
Wenn man das durchzieht, kommt
57894736847368421
57894736847368421
15789473684736842
111 1 11 1 11
raus, falls ich mich gerade nicht vertan habe (->Uhrzeit!!!).
EDIT: Ja, ich sehe gerade, es war noch nicht fertig … aber wenn man so weitermacht (was ich “morgen” vermutlich noch mache) sollte das Ergebnis rauskommen.
Ob das nun wirklich die kleinste Zahl ist? Ja. Und ich hatte dafür einen gar wundervollen Beweis gefunden, aber dieser Beitrag ist zu kurz, um ihn zu fassen.
Wir habn doch schon eine ganze Menge Informationen, 0 ist es nicht, und es liegt zwischen Integer.MAX_VALUE und Long.MAX_VALUE. Praktisch könnte man es über Nacht (“parallelisiert”) “durchrechnen” lassen. Dann hätte man auch die kleinste positive Zahl.
Aber darum geht es wohl nicht. Hier ging’s um Klugheit. (Eine Systematik.)
Also mal meine Idee. 5…5 nach vorne geschoben verhält sich neutral. Wieso dann nicht 5…56? Das wäre imho fast das Doppelte. Usw. usf.
+1 dafür
Mittels „bruteforce“ habe ich bis zu einer Zahlenlänge von 100 Stellen alle Zahlen ermittelt, auf die das Kriterium zutrifft.
@Marco13 ist auf jeden Fall auf dem richtigen Weg
105263157894736842
157894736842105263
210526315789473684
263157894736842105
315789473684210526
368421052631578947
421052631578947368
473684210526315789
105263157894736842105263157894736842
157894736842105263157894736842105263
210526315789473684210526315789473684
263157894736842105263157894736842105
315789473684210526315789473684210526
368421052631578947368421052631578947
421052631578947368421052631578947368
473684210526315789473684210526315789
105263157894736842105263157894736842105263157894736842
157894736842105263157894736842105263157894736842105263
210526315789473684210526315789473684210526315789473684
263157894736842105263157894736842105263157894736842105
315789473684210526315789473684210526315789473684210526
368421052631578947368421052631578947368421052631578947
421052631578947368421052631578947368421052631578947368
473684210526315789473684210526315789473684210526315789
105263157894736842105263157894736842105263157894736842105263157894736842
157894736842105263157894736842105263157894736842105263157894736842105263
210526315789473684210526315789473684210526315789473684210526315789473684
263157894736842105263157894736842105263157894736842105263157894736842105
315789473684210526315789473684210526315789473684210526315789473684210526
368421052631578947368421052631578947368421052631578947368421052631578947
421052631578947368421052631578947368421052631578947368421052631578947368
473684210526315789473684210526315789473684210526315789473684210526315789
105263157894736842105263157894736842105263157894736842105263157894736842105263157894736842
157894736842105263157894736842105263157894736842105263157894736842105263157894736842105263
210526315789473684210526315789473684210526315789473684210526315789473684210526315789473684
263157894736842105263157894736842105263157894736842105263157894736842105263157894736842105
315789473684210526315789473684210526315789473684210526315789473684210526315789473684210526
368421052631578947368421052631578947368421052631578947368421052631578947368421052631578947
421052631578947368421052631578947368421052631578947368421052631578947368421052631578947368
473684210526315789473684210526315789473684210526315789473684210526315789473684210526315789
Der Code dazu:
import java.math.BigInteger;
public class Puzzle {
public static void main(String[] args) {
for (int b = 0; b < 99; b++) {
for (int a = 2; a < 10; a++) {
BigInteger x[];
x = BigInteger.valueOf(a).multiply(BigInteger.valueOf(10).pow(b).subtract(BigInteger.valueOf(2))).divideAndRemainder(BigInteger.valueOf(19));
if (x[1].equals(BigInteger.ZERO) && x[0].toString().length() == b) {
System.out.println(x[0].toString() + a);
}
}
}
}
}
Damit die Berechnung auch in ertragbarer Zeit erfolgt (quasi in Nullzeit…), habe ich das Problem mathematisch formuliert.
Ich habe die Zahl in x und a unterteilt. a ist eine einzelne Ziffer, x der Rest der Zahl. b ist die Länge von x, die man mittels Logarithmus errechnen kann (braucht man für die programmierte Lösung aber nicht).
Die Bedingung sieht dann so aus: a * 10^b + x = 2 * (10x + a)
. Das dann nach x aufgelöst und für a zwischen 2 und 9 durchlaufen lassen. b habe ich iterativ erhöht und dann überprüft, ob die Länge vom errechneten x tatsächlich b ist.
Coole Sache
Aber warum muss „a“ eine gerade Zahl sein?
Aber mal im ernst, so sehr ich diese Logikspiele liebe, wer denkt sich sowas aus und wann und warum? Welchen Praxisbezug könnte das haben?
Ich denke die meisten hätte nach ein mal rumprobieren entschieden, dass es dafür keine Lösung gibt.
Aber irgendwer saß davor und dachte sich: Ne, vielleicht gibt es ja doch eine Lösung für mein willkürlich erfundenes Problem.
Das scheint ein Fehler zu sein, cmrudolf hat ja z.B. 157894736842105263 als zweitkleinste Zahl gefunden, und später Beispiele für alle Ziffern außer 0 und 1. Und dass die nicht funktionieren können, sollte intuitiv klar sein, wenn man sich überlegt, dass die verdoppelte Zahl damit anfangen muss.
Ohja, irgendwas mit x = m*10 + a
und floor(log10(m))+1
(der Länge) steht hier auch auf meinem Papier, aber da schien kein systematischer Weg rauszukommen, um die Lösung auszurechnen. Ansonsten… hab’ ich bei meiner Lösung an einer Stelle einen Übertrag vergessen aber grundsätzlich würde man damit ja zur Lösung kommen, das ist mir dann mal „gut genug“
Ach ja, @TMII : Falls dich interessiert, wer sich wann warum mit solchen Fragen beschäftigt, könnten die Referenzen, die man mit einer „Rückwärtssuche“ unter 105263157894736842 - OEIS findet, relevant sein Ganz konkret suchten wir hier die A146088 - OEIS