プライムタイム!

Mar 01 2023
私の友人の Doug は、ソーラー メトリック クロックの機能リクエストを行いました。表示された時間が素数であることを知らせるインジケーターを追加してください。これは、私の素数に対する執着と、このプロジェクトを際限なくやり続けたいという願望と一致しています。

私の友人のDoug は、ソーラー メトリック クロックの機能リクエストを行いました。表示された時間が素数であることを示すインジケーターを追加してください。これは、私の素数に対する執着と、このプロジェクトを際限なくやり続けたいという願望と一致しています。

だからもちろんやりました。

この目的のために、hh:mm 時間を単一の数値として見なさないことにしました。時間と分では数量の数え方が異なるため、それをスカラーとみなすのは正しくないようです。ただし、太陽時間と地方メートル時間は両方ともスカラーとして意味を持ちます。

私は、起動時に表示可能な最大数 (9999) 未満のすべての素数を計算し、それらをスパース ベクトルに保存し、オンデマンドで高速ルックアップを実行して、その時間が素数かどうかを確認しようと考えました。ダグと私はそのアプローチについて話し合いました。彼は、イーロンが私たち全員が住んでいるシミュレーションに何らかの変更を加えた場合、素数が変わる可能性があるため、電源投入時に素数を計算するのが最も安全であると推論しました。それは理にかなっていました。

残念ながら、私の Arduino Uno Wifi Rev2 ボードには、エラトステネスのふるいアルゴリズムのデータ構造と使用したいルックアップ ベクトルを格納するのに十分なメモリがありません。Arduino コンピューティング プラットフォームの興味深い点の 1 つは、リソースに制約があることです。高校生のときに Apple II でアプリケーションを作成したことに戻ります。物事を小さく効率的にすることに注意を払う必要があります。

10,000 までの任意の数値の素数性は、10,000 の平方根の後の最初の素数までの素数で割り切れるかどうかを確認することで判断できることがわかります。これは素数を決定するだけであり、因数を計算するには十分ではありません。自分で理解するのは楽しいので、ここでは数論を説明しません。

配列 [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79] をハードコーディングしました。 、83、89、97、101] を時計に入力し、4 桁の 7 セグメント ディスプレイのいずれかにメートル法時間を描画するたびに割り切れるかどうかをテストします。これは実際には非常に効率的です。数値の半分は 2 に対してテストすることで除外されます (以下同様)。

時刻が素数になると、最後の桁に続く小数点が点灯します。

ローカルメートルタイムは最高です!

ゴールデンタイムに気づくのが楽しいです。表示される太陽時間と地方計量時間の両方が素数であることがよくあります。それは数論的なエンドルフィンの二重の衝撃です。