Für eine Bibliothek muss ich die ersten Primzahlen bis zu einem Limit L speichern. Diese Sammlung muss eine O (1) Lookup-Zeit haben (um zu überprüfen, ob eine Zahl prim ist oder nicht) und es Es muss einfach sein, die nächste Primzahl zu finden (vorausgesetzt, sie ist kleiner als L).Effiziente Speicherung von Primzahlen
Angesichts L ist fixiert, ein Eratostene Sieb, um die Liste zu erstellen, ist in Ordnung. Im Moment verwende ich ein gepacktes Boolesches Array, um die Liste zu speichern, die nur Einträge für ungerade Zahlen zwischen 3 und L (inklusive) enthält. Dies benötigt (L-2)/2 Speicherbits. Ich möchte in der Lage sein, L statisch zu erhöhen, ohne mehr Speicher zu verwenden.
Gibt es eine Datenstruktur, die weniger Speicher mit ähnlichen Eigenschaften verwendet? Oder mit mindestens der konstanten Nachschlagezeit? (Ungerade Zahlen können dann aufgezählt werden, bis wir eine erstklassige bekommen)
(die Sprache, die ich schrieb dies in ist Factor aber diese Frage wäre das gleiche in jeder Sprache sein, die oder leicht programmierbar gepackten Bit-Arrays in-gebaut hat)
Was ist ein typisches 'L'? Ist dies ein Embedded-Gerät, bei dem der Speicher knapp ist? Es könnte sich auf Empfehlungen auswirken. Angesichts der Tatsache, dass 50.847.534 Primzahlen unter einer Milliarde liegen, könnten Sie mehr Zeit mit dem Packen/Entpacken verbringen und dann ein geradliniges Array von 4-Byte-Ganzzahlen. –
L ist ab heute 5.000.000. –
Und ich würde nicht mehr brauchen als die ~ 320kB Speicher, die ich heute habe. –