Dies ist eine Code-Golf-Herausforderung, an die ich mit mathematischer Neigung dachte. Die Herausforderung besteht darin, den kürzestmöglichen Code so zu schreiben, dass offen ist, ob der Code terminiert oder nicht. Ein Beispiel für das, was ich meine, könnte der folgende Teil des Python-Codes sein, der von einer Antwort auf diese Frage von cs stackexchange angepasst wurde .
def is_perfect(n):
return sum(i for i in range(1, n) if n % i == 0) == n
n = 3
while not is_perfect(n):
n = n + 2
Mathematiker vermuten, dass es keine ungeraden perfekten Zahlen gibt, aber es wurde nie bewiesen, sodass niemand weiß, ob dieser Code jemals enden wird. Können Sie sich andere Codeteile ausdenken (die sich möglicherweise auf andere offene Probleme wie die Collatz-Vermutung oder die Doppelprimus-Vermutung stützen), die kürzer sind, für die jedoch nicht bekannt ist, ob sie enden oder nicht?
Bearbeiten: Einige Leute haben eine gute Zusatzregel vorgebracht - Die Lösungen für die Frage sollten deterministisch sein. Obwohl es noch interessanter sein könnte, wenn Sie kürzere Lösungen mit Nichtdeterminismus finden könnten. In diesem Fall lautet die Regel, ein Snippet zu finden, für das die Wahrscheinlichkeit der Beendigung unbekannt ist.
n=3
while sum(k*(n%k<1)for k in range(1,n))-n:n+=2
.Antworten:
Gelee , 7 Bytes
Probieren Sie es online!
Hintergrund
Dies wird beendet, sobald eine vierte Lösung für das Brocard-Problem gefunden wurde , dh eine Lösung n! + 1 = m² mit (n, m) ≠ (4, 5), (5, 11), (7, 71) über den positiven ganzen Zahlen. Die Implementierung verwendet keine Gleitkomma-Arithmetik und wird daher nur beendet, wenn eine vierte Lösung gefunden wird oder wenn n! kann nicht mehr im Speicher dargestellt werden.
Das Problem von Brocard wurde zum ersten Mal in dieser Antwort von @xnor verwendet.
Wie es funktioniert
quelle
Jelly ,
119 BytesDies wird beendet, sobald die sechste Fermat-Primzahl gefunden wurde.
Probieren Sie es online!
Wie es funktioniert
quelle
Pyth, 10 Bytes
Verwendet die Vermutung, dass alle Fermat-Zahlen zusammengesetzt
2^(2^n)+1
sindn>4
.quelle
Python, 36 Bytes
Verwendet Brocards Problem :
Berechnet aufeinanderfolgende Fakultäten und überprüft, ob sie Quadrate sind und haben
k>7
. Danke an Dennis für 2 Bytes!Dies setzt voraus, dass Python weiterhin eine genaue Arithmetik für beliebig große Zahlen besitzt. In der tatsächlichen Implementierung wird es beendet.
quelle
-~n**.5
nicht funktionieren(n+1)**.5
?~
, sodass nur ein TypeError ausgelöst wird , wenn versucht wird, ein Float bitweise zu negieren.Perl,
5038363433 BytesErklärung: 196 ist eine mögliche Lychrel-Zahl - eine Zahl, die kein Palindrom bildet, indem sie wiederholt das Gegenteil zu sich selbst hinzufügt. Die Schleife wird fortgesetzt, bis $ n der Umkehrung entspricht, die für den Anfangswert 196 noch unbekannt ist.
das ist nicht gültig.
Daher ist keine der Zahlen in dieser Reihenfolge gültig.
Bearbeiten: Golfed es mit einer till-Schleife anstelle einer for-Schleife (irgendwie). Außerdem hatte ich weniger Bytes, als ich dachte (ich sollte mir mein Bytecount in Zukunft genauer ansehen).
Bearbeiten: Ersetzt
$n
durch$_
, um 2 Bytes für das implizite Argument in zu speichernreverse
. Ich denke, das ist so gelungen, wie es diese Implementierung bringen wird.Edit: Ich habe mich geirrt. Anstelle der Verwendung von
until($%=reverse)==$_
mir gehen kann , während die Differenz nicht Null ist (dh true):while($%=reverse)-$_
.quelle
MATL, 11 Bytes
Beendet, wenn die Goldbach-Vermutung falsch ist. Das heißt, das Programm stoppt, wenn es eine gerade Zahl findet, die größer
2
ist als die Summe zweier Primzahlen.quelle
05AB1E , 8 Bytes
Wird beendet, wenn die 6. Fermat-Primzahl gefunden wurde.
Erläuterung
quelle
Python,
3028 BytesDieses Programm wird genau dann angehalten, wenn eine ganze Zahl n größer als 1 ist, sodass 2 ^ (n-1) -1 durch n ^ 3 teilbar ist. Meines Wissens ist nicht bekannt, ob eine Zahl mit dieser Eigenschaft existiert (wenn eine Zahl, die diese Eigenschaft erfüllt, eine Primzahl ist, wird sie Wieferich-Primzahl der Ordnung 3 zur Basis 2 genannt, und es ist offen, ob eine solche Primzahl existiert).
quelle
(n-1)
mit~-n
Haskell, 47 Bytes
Durchsuchen der ersten Quasiperfekt-Zahl , bei der es sich um eine Zahl handelt,
n
deren Summe aus Teilern besteht2*n+1
. Anstatt 1 hinzuzufügen, schließe ich 1 aus der Liste der Teiler aus.quelle
Brain-Flak,
212208204 BytesDieses Programm verwendet einen von MegaTom geschriebenen Multiplikationsalgorithmus und einen von 1000000000 geschriebenen Nicht-Quadrat-Checker
Probieren Sie es online
Dieses Programm startet bei 8 und testet jede Zahl, um festzustellen, ob n! +1 eine quadratische Zahl ist. Es wird beendet, wenn es eines findet. Dies ist als Brocard-Problem bekannt und in der Mathematik ein offenes Problem.
quelle
Brachylog (v2), 3 Bytes in der Brachylog-Codierung
Probieren Sie es online! (Aus offensichtlichen Gründen wird die Zeit abgelaufen, ohne dass etwas sichtbar ist.)
Volles Programm; Wenn es ohne Eingabe ausgeführt wird, wird nach der ersten Smarandache-Primzahl gesucht und ausgegeben,
true.
ob und wann eine gefunden wird. Es ist eine offene Frage, ob Smarandache-Primzahlen existieren. (Beachten Sie, dass der Brachylog-Algorithmus zum Testen von Primzahlen, obwohl er theoretisch mit beliebig großen Zahlen arbeitet, in der Regel langsam ausgeführt wird. Wenn Sie also selbst nach Smarandache-Primzahlen suchen möchten, empfehle ich, eine andere Sprache zu verwenden.)Erläuterung
Brachylog verarbeitet die Dezimalstellen einer Zahl, wenn Sie versuchen, sie wie eine Liste zu behandeln. Daher ist "range" gefolgt von "concatenate" eine sehr knappe Methode, um die Folge von Smarandache-Zahlen zu generieren (und dann filtern wir diese nach der Primalität; Brachylogs) Das Standardverhalten des vollständigen Programms erzwingt dann das erste Element des resultierenden Generators. Der Bereich hat eine führende Null, aber zum Glück entfernt Brachylog mit diesem Flussmuster die Null, anstatt zu scheitern.
Hier ist ein Beispiel, in dem die erste Smarandache-Nummer gefunden wird, die gleich 6 ist (Mod 11), als Demonstration eines ähnlichen Programms, das innerhalb von 60 Sekunden beendet wird, anstatt einen unbekannten Stoppstatus zu haben:
Probieren Sie es online!
Dies würde
true.
als vollständiges Programm ausgegeben, aber ich habe dasZ
Kommandozeilenargument eingegeben, um die fragliche Zahl tatsächlich auszudrucken, was besser demonstriert, dass dieser allgemeine Ansatz funktioniert.quelle
Python 2, 88 Bytes
Dieser Code endet, wenn 10223 eine Sierpiński-Nummer ist. 10223 ist derzeit der kleinste Kandidat, der ab Dezember 2013 eine Sierpiński-Zahl sein kann oder nicht.
Eine Sierpiński-Zahl ist eine Zahl,
k
bei der alle Zahlen der Form zusammengesetzt(k * 2^n) + 1
sind.quelle
10223*2^31172165 + 1
entdeckt . Seitdem21181
ist die kleinste Zahl, für die nicht bekannt ist, ob es sich um Sierpiński handelt oder nicht.Pyth, 16 Bytes
Gibt den ersten Wert zurück, für den die Collatz-Vermutung nicht gilt. Da nicht bekannt ist, ob die Vermutung für alle Zahlen gilt, ist nicht bekannt, ob dieser Code enden wird.
quelle
Eigentlich 16 Bytes
Probieren Sie es online!
Dieser Code endet, wenn es eine zusammengesetzte Zahl gibt
n
, die sichtotient(n)
teiltn-1
( Lehmers totientes Problem ).Erläuterung:
quelle
Gelee ,
98 Bytes-1 Byte dank @Dennis! (Verwenden Sie Exponentiation anstelle von Multiplikation, um zu vermeiden
Æṣ(0)
)Gibt eine Liste mit Null und der kleinsten ungeraden perfekten Zahl zurück , falls vorhanden.
Wie?
quelle
Haskell, 46 Bytes
Beendet sich, wenn die vierte Lösung für das Brocard-Problem gefunden wird .
quelle
Python, 92 Bytes
Dies ist kein Gewinn bei Code-Golf-Wettbewerben, und es erfordert unendlich viel Speicher und Rekursionstiefe, aber dies ist eine fast perfekte Gelegenheit, ein interessantes Problem zu lösen, das ich vor zwei Jahren beim Mathematikstapel-Austausch gefragt habe, dass keine Fibonacci-Zahl größer als 8 die Summe ist von zwei positiven Würfeln . Witzigerweise begann es als Code-Golf-Challenge-Idee, also habe ich wohl den Kreis geschlossen.
quelle
Python 2,
1239892 BytesDieser Code endet, wenn die Goldbach-Vermutung nicht für alle geraden Zahlen gilt (dh wenn alle geraden Zahlen als Summe von zwei Primzahlen ausgedrückt werden können). Es wurde derzeit auf Nummern bis zu 4 * 10 ^ 18 getestet.
Ein großes Dankeschön an @ Pietu1998 für die enorme Verkürzung meines Codes!
BEARBEITEN: Danke an @ JonathanAllan für das Rasieren von 6 Bytes meines Codes!
quelle
g=lambda n:[p(b)*p(n-b)for b in range(n)]and g(n+2)
. Ich denke auch, dass dies lauten sollte "wird enden, wenn die Goldbach-Vermutung nicht gilt".JavaScript (ES6),
104101 ByteVerwendet die gleiche Methode wie die Perl-Antwort: Setzt n auf 196 und addiert dann wiederholt n zu seiner Basis 10-Umkehrung, bis es ein Palindrom in Basis 10 ist.
quelle
Python, 80 Bytes
Beendet, wenn die Collatz-Vermutung als falsch erwiesen ist. Siehe diese Frage .
quelle
Python 2, 64 Bytes
Es wurde nachgewiesen, dass keine Lychrel-Zahlen in der Basis 10 existieren. 196 ist der Kandidat für die kleinste Lychrel-Zahl zur Basis zehn. Es hat sich gezeigt, dass ein Palindrom, wenn es existiert (196 ist keine Lychrel-Zahl), mindestens eine Milliarde (10 ^ 9) Stellen hat, weil die Leute den Algorithmus so lange ausgeführt haben.
quelle
Gelee , 7 Bytes
Probieren Sie es online! (druckt zwei Elemente, nicht 4, damit du es halt tatsächlich sehen kannst)
Erläuterung
quelle
R, 30 Bytes, fraglich, ob es deterministisch ist
Der Standard-Zufallszahlengenerator von R hat in 653 aufeinanderfolgenden Dimensionen die gleiche Verteilung, in 654 Dimensionen ist dies jedoch nicht bekannt. Somit kann es eine Folge von Pseudozufallszahlen geben oder nicht, die das niedrigste Element von einem gegebenen Vektor 654-mal in einer Reihe (hier dem Vektor
1:2
) abtasten .Da Rs RNG periodisch ist (wenn auch mit sehr langer Periode), behaupte ich, dass dies deterministisch ist , da es schließlich eine Schleife zum Start gibt. Ihre Meinung kann natürlich abweichen.
quelle
Python 3, 101 Bytes
Ich weiß, es ist länger als viele andere, aber ich habe viel Zeit damit verbracht zu sehen, wie kurz ich das Golf spielen kann.
Dies versucht, Eulers Sum of Powers Conjecture für
k=6
(es gibt keine positive ganzzahlige Lösung der diophantinischen GleichungA^6+B^6+C^6+D^6+E^6==F^6
), für die kein Gegenbeispiel gefunden wurde, zu widerlegen .In Python 2 (104 Byte):
Weniger golfen:
Mathy-Version ohne Auswertung:
Alternativer Verweis: Eulers Sum of Powers-Vermutung - MathWorld
quelle
Python, 68 Bytes
Probieren Sie es online aus
Versucht, eine von Gelfands Fragen zu beantworten .
quelle
Clojure, 154 Bytes
Prüft, ob es eine Zahl über 82.000 gibt, die nur Nullen und Einsen für die Basis 2 bis zur Basis 5 enthält. Mit anderen Worten, es wird geprüft, ob es eine andere Zahl in dieser Sequenz gibt .
In dieser speziellen Gruppe gibt es nur drei Zahlen:
0
,1
und82,000
. Nach dieser Regel gibt es keine weiteren Zahlen, die weniger als ungefähr sind3*10^19723
.quelle
Pyt , 14 Bytes
Port von mbomb007's Antwort .
quelle