Mathe-Puzzle: Verdoppeln durch "Vordrängeln"

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? :slight_smile:

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. :slight_smile:

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.

Hab's vielleicht

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.

1 Like

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 :slight_smile:

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 :wink:

Lösung
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);
                }
            }
        }
    }
}
Lösungsansatz

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.

1 Like

Hier das Video zum Puzzle:

Trotz Comic Sans :scream: und „Genius“ sehenswert.

Coole Sache :+1:
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 :rolling_eyes: aber grundsätzlich würde man damit ja zur Lösung kommen, das ist mir dann mal „gut genug“ :sunglasses:

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 :slight_smile: Ganz konkret suchten wir hier die A146088 - OEIS