Collatz-Vermutung:
Das folgende Programm hält immer an:
void function( ArbitraryInteger input){
while( input > 1){
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
// Halt here
}
Leichte Variation (immer noch eine Vermutung, da sie auf einem Ergebnis von Collatz basiert):
Bei einigen Eingaben wird das folgende Programm niemals zweimal in denselben Zustand versetzt (wobei der Zustand durch den Wert bestimmt wird, der von "input" gespeichert wird):
void function( ArbitraryInteger input){
while( input >= 1){ // notice the "="
if(input % 2 == 0)
input /= 2;
else
input = (input*3) + 1;
}
}
Beachten Sie, dass das zweite Programm niemals anhält, unabhängig davon, ob das erste Programm anhält oder nicht.
Es wird angenommen, dass das erste Programm für jede Eingabe immer beendet wird, wir haben jedoch keinen Beweis dafür, und es gibt möglicherweise noch eine ganze Zahl, für die das Programm nicht angehalten wird (es gibt auch einen Preis von 100 USD für den Beweis dafür). .
Das zweite Programm ist ebenfalls interessant: Es besagt, dass das Programm für einige Eingaben niemals zweimal in den gleichen Zustand wechselt, was im Grunde voraussetzt, dass das erste Programm eine Sequenz aufweist, von der bekannt ist, dass sie ohne Wiederholung auseinander läuft. Es erfordert nicht nur, dass die Collatz-Vermutung falsch ist, sondern es erfordert, dass sie falsch und ohne Schleifen ist , abgesehen von der offensichtlichen 1,4,2,1-Schleife.
Wenn Collatz nur Gegenbeispiele für Schleifen hat, ist die Abweichung von der Vermutung falsch
Wenn Collatz ohne Schleifen falsch ist, ist die Variation der Vermutung wahr
Wenn Collatz wahr ist, ist die Variation falsch
Wenn Collatz falsch ist, weil es Schleifen hat und weil es eine Zahl hat, für die es divergiert, ist die Variation der Vermutung wahr (es ist nur eine Zahl erforderlich, für die es divergiert, ohne eine Schleife einzugeben).
Ich denke, die Variante ist interessanter (nicht nur, weil ich sie durch Zufall gefunden und dank @LieuweVinkhuijzen bemerkt habe), sondern weil es tatsächlich eines echten Beweises bedarf. Durch brachiales Forcen können wir möglicherweise eines Tages eine Schleife finden (und das wird eine Schleife sein, die länger als 70 Nummern ist: Nach dem gegenwärtigen Stand der Technik können keine Endlosschleifen kürzer als 68 oder so sein), und brutal Erzwingen ist nicht interessant: Es ist nur das Knacken von Zahlen. Wir können jedoch eine unendliche divergierende Sequenz nicht brachial erzwingen, wir wissen nicht, ob sie wirklich ohne einen echten Beweis enden wird.
EDIT: Ich habe den Teil über Collatz Conjecture übersprungen. Entschuldigung, ich habe wirklich auswendig mit einem Algorithmus geantwortet, den ich vor einigen Jahren gelesen habe. Ich habe nicht erwartet, dass das bereits erwähnt wurde.
EDIT2: Ein Kommentar hat mich darauf aufmerksam gemacht, dass ich den Algorithmus mit einem Fehler geschrieben habe. Dieser Fehler unterscheidet meine Antwort jedoch von der Collatz-Vermutung (aber eine direkte Variation davon).