ひょんなことから

先日、僕の車のナンバーが「2357」なんです、
とFacebookの個人アカウントで発言したことから、
今日は、Scratchで素数を抽出してみました。

素数とは

そもそも、素数とは何でしょうか。
数学ではきちんと定義する、
というのが基本なのですが、
ざっくりと言えば、

素数って、もう割れない数、というイメージです。
たとえば、11って、もう割れないので素数です。
厳密には、「11」は、「1」と「11」で割れます。
つまり、「1」と、その数自身で割れる数が素数です。

そして、「1」は素数には、入れません。
なので、一番小さな素数は「2」となります。
次が「3」、次が「5」、次が「7」、と続きます。
つまり、ナンバー「2357」って、
小さいほうから順に素数が並んだものとなっています。

さらに、「2357」が素数です。
「2357」は、もう割れない数なのです。
つまり、「2357」は、「1」か「2357」でしか割れないのです。
ということで検証してみました。

計算方式(アルゴリズム)

適当な数字は、素数の掛け算で表せます(素因数分解)。
たとえば、「10」は、「2 × 5」という具合です。
したがって、ある数字が素数か否かの判定は、
その数字よりも小さなすべての素数で割り算をし、
割り切れるか否かで行います。

そこで次のようなスクリプトを作ってみました。

ところが、
途中で割り切れたときも延々と
全部の素数で割り算をしますので、遅い。

ということで、次のように改良しました。

結果発表


「2357」が素数ということで抽出されています。
1番目の素数「2」から数えて、
素数「2357」は、350番目の素数です。

こういうプログラムも面白いのですが、
ゲームに比べると、ちょっと地味ですね(笑)
でも、こういうのが本物の勉強なのでは。
素数は、中学3年生で習うようです。
そんなにもったいつけてやるものでもない、
と思います。

ZERO ONE studioで本当の勉強をしましょう。

ZERO ONE studioについて詳しく見る!