Primetime!

Mar 01 2023
Mein Kumpel Doug hat eine Funktionsanfrage für die solarmetrische Uhr gestellt: Fügen Sie einen Indikator hinzu, der Ihnen sagt, wann die angezeigte Zeit eine Primzahl ist. Das steht im Einklang mit meiner Obsession für Primzahlen und meinem Wunsch, endlos an diesem Projekt herumzubasteln.

Mein Kumpel Doug hat eine Funktionsanfrage für die solarmetrische Uhr gestellt : Fügen Sie einen Indikator hinzu, der Ihnen sagt, wann die angezeigte Zeit eine Primzahl ist. Das steht im Einklang mit meiner Obsession für Primzahlen und meinem Wunsch, endlos an diesem Projekt herumzubasteln.

Also habe ich es natürlich getan.

Ich habe beschlossen, die hh:mm-Zeit zu diesem Zweck nicht als einzelne Zahl zu betrachten. Stunden und Minuten zählen unterschiedliche Größen, daher erscheint es nicht richtig, dies als Skalar zu betrachten. Aber sowohl die solaren als auch die lokalen metrischen Zeiten sind als Skalare sinnvoll.

Ich dachte, ich würde beim Start alle Primzahlen berechnen, die kleiner als die maximal darstellbare Zahl (9999) sind, sie in einem spärlichen Vektor speichern und bei Bedarf schnell nachschlagen, um zu sehen, ob die Zeit Primzahl war. Doug und ich haben über den Ansatz gesprochen. Er argumentierte, dass sich die Primzahlen ändern könnten, wenn Elon Änderungen an der Simulation vornehmen würde, in der wir alle leben, sodass es am sichersten wäre, sie beim Einschalten zu berechnen. Das ergab Sinn.

Leider verfügt mein Arduino Uno Wifi Rev2-Board nicht über genügend Speicher für die Datenstrukturen des Sieve of Eratosthenes-Algorithmus und den Suchvektor, den ich verwenden wollte. Eines der interessanten Dinge an der Arduino-Rechenplattform ist, dass sie ressourcenbeschränkt ist. Das erinnert mich an das Schreiben von Bewerbungen auf dem Apple II aus meiner Schulzeit: Man muss darauf achten, die Dinge klein und effizient zu machen.

Es stellt sich heraus, dass Sie die Primalität einer beliebigen Zahl bis 10.000 bestimmen können, indem Sie ihre Teilbarkeit durch die Primzahlen bis zur ersten Primzahl nach der Quadratwurzel von 10.000 überprüfen. Dies reicht nicht aus, um Faktoren zu berechnen, sondern nur, um die Primalität zu bestimmen. Ich werde die Zahlentheorie hier nicht darlegen, weil es Spaß macht, es selbst herauszufinden.

Ich habe das Array [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79] fest codiert , 83, 89, 97, 101] in die Uhr ein und teste die Teilbarkeit jedes Mal, wenn ich eine metrische Zeit auf eine der 4-stelligen 7-Segment-Anzeigen male. Das ist eigentlich ziemlich effizient: Die Hälfte der Zahlen wird durch Testen gegen 2 ausgeblendet und so weiter.

Wenn die Zeit prim ist, leuchte ich den Dezimalpunkt nach der letzten Ziffer auf:

Lokale metrische Zeit ist Prime!

Ich genieße es, zu bemerken, wann Hauptsendezeit ist. Es kommt ziemlich häufig vor, dass sowohl die angezeigten Sonnenzeiten als auch die lokalen metrischen Zeiten Primzeiten sind. Das ist ein doppelter Schub zahlentheoretischer Endorphine!