第18講 マルチスレッドプログラミング=並列処理プログラミング

第3話 素数探索はいかにしたらマルチ化できるか?

素数にはとても面白い性質があります。

素数を例えば5で割った余りで分類するとします。
5以外の素数は、5で割ったときの余りが
1の場合、2の場合、3の場合、4の場合
の4つの場合に分かれます。
5以外の素数を
2,3,7,11,13,17,19,23,29,31,・・・
5で割っていくとそれぞれの余りは、
2,3,2,1,3,2,4,3,4,1,・・・
ですね。
ですから、
5で割ったときの余りが1のグループ・・・11,31,41,61,・・・・
5で割ったときの余りが2のグループ・・・2,7,17,37,・・・・
5で割ったときの余りが3のグループ・・・3,13,23,43,・・・・
5で割ったときの余りが4のグループ・・・19,29,39,59,・・・・
と、5以外の素数を4分類することが出来るわけです。
では、4グループの素数の現れる割合は、
異なるのでしょうか。
実は、どのグループにも全く同じ頻度で素数が現れるのです。

今は、5で割った余りで分類しましたが、
7で割って6分類することも出来ます。
この6分類にも素数は、同じ割合で登場します。
さらに、
11で割って10分類しても同じ割合で素数は現れます。
17で割って16分類しても同じ割合で素数は現れます。
19で割って18分類しても同じ割合で素数は現れます。
      ・・・
      ・・・
      ・・・
1999993で割っ余て、1999992分類しても同じ割合で素数は現れます。
(神は1999992面をもつサイコロを振って、素数を割り振っているのです。)
      ・・・
      ・・・
      ・・・


どの分類にも同じ割合で素数が現れる・・・
これは、割る数をいかに大きくしていっても成り立つのです。


皆さん、お気づきですね。
分類するときに割る数は!?
3,5,7,11,13,17,19,・・・・
そうです。
素数です。

ということは、
6スレッド化するには、素数を
7で割ったときに余りが1になる素数、
7で割ったときに余りが2になる素数、
7で割ったときに余りが3になる素数、
7で割ったときに余りが4になる素数、
7で割ったときに余りが5になる素数、
7で割ったときに余りが6になる素数
に6分類し、
それぞれの分類をそれぞれのスレッドに探索させれば、
6スレッド探索が可能になります。

第2話へ 第4話へ

a

eclipse c++ 入門講義第1部へ

魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ