前回、素数に関する戯言を行った。その後、Twitterで興味深いことを知ったので、プログラムを書き、Studyに新たなページを実装した。
今回は、ちょっと特別な素数の話をすることにする。

  1. 双子素数とは
  2. 『双子』と問われると、どのようなものを想像されるだろうか。『双子座のカストルとポルックス』『MOTHER3のリュカとクラウス』、『東方幻想郷の夢幻姉妹』、
    『長寿で有名になったきんさんぎんさん』『月姫の琥珀さん&翡翠ちゃん』など、人それぞれ異なると思われる。しかし、このような一般に知られている『双子』とは、
    少々違う印象を持たれるけれど、『双子』という名を持つものが『双子素数』である。
    そもそも、双子素数とはどのようなものであるか。双子素数とは、異なる2つの素数の組のうち差が2となるようなもののことを言う。先に述べてしまうと、
    (3,5)は双子素数である。ちなみに、『双子素数が無限に存在するか』は未解決問題である(この問題は双子素数の予想と呼ばれる)。

  3. 双子素数のアルゴリズム
  4. 前回扱った素数を求める際のアルゴリズムを再度考察してみよう。ある素数(仮に"N"とする)を2からNまで順に割っていき、N以外の数で割り切れなければ、
    Nは素数。そうでない場合はNは素数でない。双子素数は、『差が2であるような素数の組』である。すなわち、ある1つの素数(仮に"P1"とする)が求まった後、
    それに2を加えた数(仮に"P2"とする)が素数であるかどうか判定すればよい。P2が素数ならば、(P1,P2)は双子素数である。P2が素数でなければ、双子素数でない。

  5. プログラムを使って出力する
  6. 前回同様、アルゴリズムを理解していれば双子素数もプログラミング言語を用いて求めることが出来る。繰り返す操作が必要なので、今回も『for文』を使うことになる。
    以下にC言語で作成した2つのプログラムを示す。



    図1. 双子素数を出力するプログラム(C言語)


    リクエストがあれば他の言語でも記述してみようと思う。なお、このプログラムでは途中までしか出力されないので、より多く出力したい場合は値を書き換えればよい。



    図2. アルゴリズム

    前回同様、プログラムの変数に沿って書かれているため、理解しがたい方もいらっしゃるかと思われますがご了承ください。


  7. プログラム書いたことない、およびプログラミング未経験だという方に
  8. 今回もブラウザ上でも双子素数を確認できるように実装してみた。興味のある方はどうぞ。
    前回も言った通り、桁が大きすぎると重くなるので注意。

    ※ブラウザバックを行うと項目のページにジャンプするので、出力した後は画面更新を行ってください。また万が一大きい値を入力したことで重くなった場合はタブを閉じてしまっても構いません。

    いくつまでの双子素数を求めますか?


  9. 終わりに
  10. 『双子素数の予想』は現在も未解決の問題であると同時に、非常に興味深いものでもある。また、素数と関連した未解決問題はこれ以外にもいくらかある。
    興味のある方はWikipedia等を参照されるとよいだろう。このページがきっかけで素数に少しでも興味を持っていただけると幸いである。

  11. 謝辞
  12. JavaScriptのプログラムを作成するのに当たり、『パズルネット智慧』様の『JavaScript入門』ページは大変参考になった。ここに改めて感謝の意を表したい。



終わりに、とか書いた癖に『あとがき』

実は半素数を出力するプログラムを先に書いたので、そちらを先に編集しても良かったのだが、なんとなくこちらから先に編集してしまった(
というわけで、次回は半素数に関する戯言になります。


最終更新日:2016年2月14日

戻る