14日目 素数の判定【30日間1日1本マクロ生活】

30日間1日1本マクロ生活、14日目です。

マクロを書く準備は、0日目に記事を書きました。

素数の判定

昨日は、エラトステネスの篩で100以下の素数だけを表に残すということをやりました。

そのときに残った表がこれです。

この表に残っているのは、素数だけです。

そして、意図的に数字6個で改行をしています。

6で割って1余る数と5余る数

どうですか。2と3以外の素数は、6で割って1余る数と、6で割って5余る数だけが残っているのが分かりますか?

そりゃそうですよね。素数というのは、1と自分自身以外では割り切れない数です。

6の倍数は、当たり前ですけど6で割り切れます。

6で割って2余る数は、偶数です。2で割り切れます。

6で割って3余る数は3の倍数です。3で割り切れます。

6で割って4余る数は、偶数です。2で割り切れます。

ですから、素数の可能性があるのは6で割って1余る数と5余る数だけなんです。

自分より小さい全ての数で割り切れなければ

自分自身よりも小さい全ての数で割り切れなければ、その数は素数です。

でも、全ての数を試す必要はありません。

確認するのは2と3と、そして6で割って1余る数、5余る数だけでいいんです。

今日はコード無しで

今日はマクロを書きません。しくみだけの説明で終わります。

素数の判定については、自然数 n について

  • 2なら素数
  • 2でなくて2で割り切れるなら素数でない。
  • 3なら素数
  • 3でなくて3で割り切れるなら素数でない。
  • 6で割って1余る数、5余る数で割り切れるかどうか、次々に調べていく。
  • \sqrt{n} 以下の全ての6で割って1余る数、5余る数で割り切れなければ素数。

これをマクロで書けば、素数の判定ができます。

そして、明日書くマクロは「Sub」ではなく「Function」で始まるマクロを書こうと思っています。

よかったら、予習してみて下さい。

Excelは便利

悔しいですが、Excelは便利です。

Microsoftにお金を払うのは癪でしょうがないんですが、Excelばかりは仕方がない。

マクロを書くようになると、Excelからは離れられないですね。

30日間、頑張ります。