Drüben unter /math/33094/deleting-any-digit-yields-a-prime-is-there-a-name-for-this wird die folgende Frage gestellt. Wie viele Primzahlen sind noch vorhanden, nachdem Sie eine der Ziffern gelöscht haben? Zum Beispiel 719
ist so eine Primzahl wie Sie bekommen 71
, 19
und 79
. Obwohl diese Frage ungelöst ist, hielt ich sie für eine nette Herausforderung beim Programmieren.
Aufgabe. Geben Sie die größte Primzahl an, die Sie finden können und die nach dem Löschen einer der Ziffern eine Primzahl bleibt. Sie sollten auch den Code bereitstellen, der es findet.
Ergebnis. Der Wert der von Ihnen angegebenen Primzahl.
Sie können eine beliebige Programmiersprache und Bibliotheken verwenden, solange diese frei sind.
Für den Anfang 99444901133
ist die größte auf der verlinkten Seite angegeben.
Zeitlimit. Ich akzeptiere die größte richtige Antwort genau eine Woche nach der ersten richtigen Antwort, die größer ist als 99444901133
in einer Antwort.
Scores soweit.
Python (primo)
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
J (randomra) (Diese Antwort hat den 1-Wochen-Timer am 21. Februar 2013 gestartet.)
222223333333
9901444133
(eine Streichung von eins 9) ist nicht prime (7 x 1414492019
). Ihr vorheriges Beispiel war jedoch richtig.Antworten:
274 Stellen
Das Auffinden dauerte ungefähr 20 Stunden CPU-Zeit und ungefähr 2 Minuten pro Prime, um es zu beweisen. Im Gegensatz dazu ist die 84-stellige Lösung in ca. 3 Minuten zu finden.
84 Stellen
77777777999999999999999777777777 (32 Stellen)
66666666666666622222222222222333 (32 Stellen)
647777777777777777777777777 (27 Stellen)
44444441333333333333 (20 Stellen)
999996677777777777 (18 Stellen)
167777777777777 (15 Stellen)
Ich empfehle dieses Tool, wenn Sie die Ursprünglichkeit bestätigen möchten: D. Alperns ECM-Applet
Verwenden Sie auch einen Repdigit-Ansatz, der am wahrscheinlichsten große Werte zu finden scheint. Das folgende Skript überspringt algorithmisch die meisten Zahlen oder Kürzungen, was ein Vielfaches von 2, 3, 5 und jetzt 11 c / o PeterTaylor ergibt (sein Beitrag erhöhte die Effizienz um ungefähr 50%).
my_math.py
finden Sie hier: http://codepad.org/KtXsydxKAlternativ können Sie auch die
gmpy.is_prime
Funktion: GMPY Project verwendenEinige kleine Geschwindigkeitsverbesserungen als Ergebnis der Profilerstellung. Die Primalitätsprüfung für den längsten der vier Kandidaten wurde an das Ende verschoben,
xrange
ersetztrange
undlong
ersetztint
Typumwandlungen.int
scheint unnötigen Overhead zu haben, wenn der ausgewertete Ausdruck zu a führtlong
.Teilbarkeitsregeln
Sei N eine postitive ganze Zahl der Form a ... ab ... bc ... c , wobei a , b und c sich wiederholende Ziffern sind.
Durch 2 und 5
- Um die Teilbarkeit durch 2 und 5 zu vermeiden , darf c nicht in der Menge [0, 2, 4, 5, 6, 8] enthalten sein . Wenn b ein Mitglied dieser Menge ist, darf die Länge von c nicht kleiner als 2 sein.
Mit 3
- Wenn N = 1 (mod 3) , dann darf N keines von [1, 4, 7] enthalten , da das Entfernen eines dieser Elemente trivial zu einem Vielfachen von 3 führen würde . Ebenso für N = 2 (mod 3) und [2, 5, 8] . Diese Implementierung verwendet eine leicht abgeschwächte Form davon: Wenn N eines von [1, 4, 7] enthält , darf es keines von [2, 5, 8] enthalten und umgekehrt. Außerdem darf N nicht nur aus [0, 3, 6, 9] bestehen . Dies ist größtenteils eine äquivalente Aussage, lässt jedoch einige triviale Fälle zu, z. B. a , b und cjedes wird ein Vielfaches von 3 Mal wiederholt .
Mit 11
- Wie PeterTaylor feststellt, ist N , wenn es die Form aabbcc ... xxyyzz hat , das heißt, es besteht nur aus Ziffern, die eine gerade Anzahl von Malen wiederholt werden, trivial durch 11 teilbar : a0b0c ... x0y0z . Diese Beobachtung beseitigt die Hälfte des Suchraums. Wenn N ungerade lang ist, muss auch die Länge von a , b und c ungerade sein (75% Reduzierung des Suchraums), und wenn N gerade lang ist, darf nur eine von a , b oder c gerade sein in der Länge (25% weniger Suchraum).
- Vermutung: Wenn abc ein Vielfaches von 11 ist , zum Beispiel 407 , dann sind alle ungeraden Wiederholungen von a , b und c auch Vielfache von 11 . Dies fällt aus dem Rahmen der obigen Teilbarkeit durch 11 - Regel; in der Tat sind nur ungerade Wiederholungen unter denen, die ausdrücklich erlaubt sind. Ich habe keinen Beweis dafür, aber systematische Tests konnten kein Gegenbeispiel finden. Vergleichen Sie: 444077777 , 44444000777 , 44444440000077777777777 usw.
Jeder kann diese Vermutung beweisen oder widerlegen.aditsu hat inzwischen bewiesen, dass dies korrekt ist.Andere Formen
2 Sätze wiederholter Ziffern
Zahlen der Form, die Randomra verfolgte, a ... ab ... b , scheinen viel seltener zu sein. Es gibt nur 7 Lösungen mit weniger als 10 1700 Stellen, von denen die größte 12 Stellen lang ist.
4 Sätze wiederholter Ziffern
Zahlen dieser Form, a ... ab ... bc ... cd ... d , scheinen dichter verteilt zu sein als die, nach denen ich gesucht habe. Es gibt 69 Lösungen mit weniger als 10 100 , verglichen mit den 32 Lösungen mit 3 Sätzen wiederholter Ziffern. Diese zwischen 10 11 und 10 100 sind wie folgt:
Es gibt ein einfaches heuristisches Argument, warum dies der Fall sein sollte. Für jede digitale Länge gibt es eine Anzahl von Wiederholungssätzen (dh 3 Wiederholungssätze oder 4 Wiederholungssätze usw.), für die die erwartete Anzahl von Lösungen die höchste ist. Der Übergang erfolgt, wenn die Anzahl der zusätzlichen Lösungsmöglichkeiten, die als Verhältnis herangezogen werden, die Wahrscheinlichkeit überwiegt, dass es sich bei der zu überprüfenden zusätzlichen Zahl um eine Primzahl handelt. Angesichts der exponentiellen Natur der Überprüfungsmöglichkeiten und der logarithmischen Natur der Primzahlenverteilung geschieht dies relativ schnell.
Wenn wir zum Beispiel eine 300-stellige Lösung finden möchten, ist es weitaus wahrscheinlicher, dass eine Überprüfung von 4 Sätzen mit wiederholten Ziffern eine Lösung ergibt als von 3 Sätzen, und es ist immer noch wahrscheinlicher, dass 5 Sätze vorhanden sind. Mit der mir zur Verfügung stehenden Rechenleistung würde die Suche nach einer Lösung, die viel größer als 100 Stellen mit 4 Sätzen ist, meine Kapazität sprengen, geschweige denn 5 oder 6.
quelle
d^x e^y f^z
erfordert, dass mindestens zwei der Sequenzlängen ungerade sind, um die Teilbarkeit durch 11 zu vermeiden. Ich weiß nicht, obis_prime
Vielfache von 11 schnell genug verworfen werden, damit dies nicht ausdrücklich in Betracht gezogen werden sollte.(na&1)+(nb&1)+(nc&1) > 1
ist es einfach genug, dass es schneller sein sollte. Warten Sie eine Minute, dies kann volle Zweige kurzschließen! Obna
gerade undnb + nc
ungerade ist,[nb, nc]
muss einer unbedingt gerade sein, und Sie können einfach zum nächsten springenna
.2
.1
Das heißt, es ist wahrscheinlich nur ein Prime222223333333 (12 Stellen)
Hier habe ich nur das Format aa..aabb..bb mit bis zu 100 Stellen durchsucht. Nur andere Treffer sind 23 37 53 73 113 311.
J-Code (aufgeräumt) (Entschuldigung, keine Erklärung):
quelle
Edit: Jemand hat schon eine tiefere Analyse gemacht als ich hier.
Keine Lösung, sondern eine grobe Abschätzung der Anzahl n-stelliger Lösungen.
J-Code wird generiert
quelle
Javascript (Brute Force)
Hat noch keine höhere Nummer gefunden
http://jsfiddle.net/79FDr/4/
Ohne eine Bigint-Bibliothek ist Javascript auf ganze Zahlen beschränkt
<= 2^53
.Da es sich um Javascript handelt, beschwert sich der Browser, wenn wir den Ausführungsthread nicht für die Aktualisierung der Benutzeroberfläche freigeben. Daher habe ich mich entschlossen, den Fortschritt des Algorithmus in der Benutzeroberfläche zu verfolgen.
quelle
Ein Link zu einer Analyse des Problems wurde gepostet, aber ich dachte, es fehlen ein paar Dinge. Lassen Sie uns Zahlen mit m Ziffern betrachten, die aus k Folgen von 1 oder mehr identischen Ziffern bestehen. Es wurde gezeigt, dass eine Lösung, wenn wir die Ziffern in die Gruppen {0, 3, 6, 9}, {1, 4, 7} und {2, 5, 8} aufteilen, keine Ziffern sowohl der zweiten als auch der dritten Gruppe enthalten kann , und es muss 3n + 2 Ziffern aus einer dieser Gruppen enthalten. Mindestens zwei der k Sequenzen müssen eine ungerade Anzahl von Ziffern haben. Von den Ziffern {1, 4, 7} können nur 1 und 7 die niedrigste Ziffer sein. Keiner von {2, 5, 8} kann die niedrigste Ziffer sein. Es gibt also entweder vier (1, 3, 7, 9) oder zwei (3, 9) Möglichkeiten für die niedrigste Ziffer.
Wie viele Kandidaten gibt es? Wir haben m Ziffern, die in k Folgen von mindestens einer Ziffer aufgeteilt sind. Es gibt (m - k + 1) über (k - 1) Möglichkeiten, die Länge dieser Sequenzen zu wählen, was ungefähr (m - 1,5k + 2) ^ (k - 1) / (k - 1) ist. Es gibt entweder 2 oder 4 Auswahlmöglichkeiten für die niedrigste Ziffer, insgesamt sechs. Für die anderen Ziffern gibt es sechs Auswahlmöglichkeiten, mit Ausnahme von 36/7 für die höchste Ziffer. die Summe ist (6/7) * 6 ^ k. Es gibt 2 ^ k Möglichkeiten, um auszuwählen, ob die Länge einer Sequenz gerade oder ungerade ist. k + 1 davon sind ausgeschlossen, weil keine oder nur eine ungerade ist; Wir multiplizieren die Anzahl der Auswahlen mit (1 - (k + 1) / 2 ^ k). Dies ist 1/4, wenn k = 2, 1/2, wenn k = 3, 11/16, wenn k = 4 usw. Die Anzahl Die Anzahl der Ziffern aus der Menge {1, 4, 7} oder {2, 5, 8} muss 3n + 2 sein, sodass die Anzahl der Auswahlmöglichkeiten durch 3 geteilt wird.
Multipliziert man alle diese Zahlen, ergibt sich die Anzahl der Kandidaten
oder
Der Kandidat selbst und k Zahlen, die durch Entfernen einer Ziffer erstellt werden, müssen alle Primzahlen sein. Die Wahrscheinlichkeit, dass eine zufällige ganze Zahl um N eine Primzahl ist, beträgt ungefähr 1 / in N. Die Wahrscheinlichkeit für eine zufällige m-stellige Zahl beträgt ungefähr 1 / (m in 10). Die Zahlen hier sind jedoch nicht zufällig. Sie wurden alle so ausgewählt, dass sie nicht durch 2, 3 oder 5 teilbar sind. 8 von 30 aufeinanderfolgenden ganzen Zahlen sind nicht durch 2, 3 oder 5 teilbar. Daher ist die Wahrscheinlichkeit, eine Primzahl zu sein, (30/8) / (m in 10) oder ungefähr 1,6286 / m.
Die erwartete Anzahl von Lösungen ist ungefähr
oder für große m über
Für k = 2, 3, 4, ... erhalten wir Folgendes:
Ab k = 10 wird die Zahl wieder kleiner.
quelle