Es gibt eine große Anzahl von Funktionen zur Erzeugung von Primzahlen. Ziemlich alle von ihnen sind konstruiert und basieren auf dem Sieb von Eratosthenes, der Möbius-Funktion oder dem Wilson-Theorem und sind im Allgemeinen in der Praxis nicht berechenbar. Es gibt aber auch Generatoren, die einen sehr einfachen Aufbau haben und zufällig gefunden wurden.
Im Jahr 2003 untersuchte Stephen Wolfram eine Klasse verschachtelter Wiederholungsgleichungen in einem Live-Computerexperiment an der NKS Summer School. Eine Gruppe von Menschen um Matthew Frank hat daraufhin weitere Experimente durchgeführt und eine interessante Eigenschaft der einfachen Wiederholung entdeckt
a(n) = a(n-1) + gcd(n,a(n-1))
mit dem Startwert von a(1) = 7
. Der Unterschied a(n) - a(n-1) = gcd(n,a(n-1))
schien immer 1 oder eine Primzahl zu sein. Die ersten Unterschiede sind ( OEIS A132199 ):
1, 1, 1, 5, 3, 1, 1, 1, 1, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 47, 3, 1, 5, 3, ...
Wenn wir nur die Einsen weglassen, erhalten wir die folgende Sequenz ( OEIS A137613 ):
5, 3, 11, 3, 23, 3, 47, 3, 5, 3, 101, 3, 7, 11, 3, 13, 233, 3, 467, 3, 5, 3,
941, 3, 7, 1889, 3, 3779, 3, 7559, 3, 13, 15131, 3, 53, 3, 7, 30323, 3, ...
Eric S. Rowland bewies einige Jahre später die Primität jedes Elements in dieser Liste. Wie Sie sehen können, sind die Primzahlen gemischt und einige von ihnen erscheinen mehrmals. Es wurde auch nachgewiesen, dass die Sequenz unendlich viele verschiedene Primzahlen enthält. Weiterhin wird vermutet, dass alle ungeraden Primzahlen auftreten.
Da dieser Primärgenerator nicht konstruiert wurde, sondern einfach zufällig gefunden wurde, wird der Primärgenerator als "natürlich vorkommend" bezeichnet. Beachten Sie jedoch, dass sich dieser Generator in der Praxis auch nicht berechnen lässt. Wie sich herausstellt, erscheint eine Primzahl p erst nach (p–3)/2
aufeinanderfolgenden Einsen. Trotzdem wird es Ihre Aufgabe sein, diesen Primärgenerator zu implementieren.
Herausforderung:
Schreiben Sie eine Funktion oder ein Programm, das die ersten n
Elemente der Sequenz druckt A137613
(die Sequenz ohne die Einsen). Sie können die Eingabenummer n >= 0
über STDIN, Befehlszeilenargument, Eingabeaufforderung oder Funktionsargument lesen . Geben Sie die ersten n
Elemente in einem beliebigen lesbaren Format an STDOUT aus oder geben Sie ein Array oder eine Liste mit diesen Werten zurück.
Das ist Code-Golf. Daher gewinnt der kürzeste Code.
Bestenliste:
Hier ist ein Stack-Snippet, um sowohl eine reguläre Rangliste als auch eine Übersicht der Gewinner nach Sprache zu generieren. Um sicherzustellen, dass Ihre Antwort angezeigt wird, beginnen Sie Ihre Antwort mit einer Überschrift. Verwenden Sie dazu die folgende Markdown-Vorlage:
# Language Name, N bytes
Wobei N die Größe Ihrer Einreichung ist. Wenn Sie Ihre Punktzahl verbessern, können Sie alte Punkte in der Überschrift behalten, indem Sie sie durchstreichen. Zum Beispiel:
# Ruby, <s>104</s> <s>101</s> 96 bytes
a(n)-a(n-1)
n
null sein?
//
) und erkläre es in deinem Beitrag. Wenn jemand mit Ihnen nicht einverstanden ist, können Sie Ihren Beitrag jederzeit bearbeiten.