第13講 素数探索
第2話 素数を探し出すためには?
では、素数を探索するプログラムを考えてみましょう。
素数であるかどうか、
決めるのはどうしたらよいでしょうか。
例えば、241は素数でしょうか。
1から241まで順に割っていって、
1と241のみでしか割り切れなければ素数です。
この方法だと、241が素数であることを確定するために、
241回も割り算をしなければなりません。
確かに、コンピュータの性能は驚くほどの能力を持っていますから、
241回は一瞬で行ってしまいます。
ですが、408135977等だと流石のコンピュータも苦戦します。
ですから、なるべく計算回数が少なくなるように工夫する必要があります。
1と自分自身は割りきれるに決まっていますから、
1と自分自身はまず除外します。
さらに、2以外の偶数は、すべて素数ではありませんから、
2以外の偶数で割る必要はありません。
ですから、例えば73なら
2,3,5,7,・・・,71
とうことになります。
実は、これでもかなり無駄があります。
18の1と自分自身を除く約数を考えてみて下さい。
2,3,6,9
です。
2で割ったときの商が9です。
さらに、3で割ったときの商が6です。
約数で割った商も約数です。
このことを考慮入れれば、
73の場合は、
2,3,5,7
で割り切れなければ素数であることが確定します。
最後が7である理由は、7の次の9の場合2乗すると、
9×9=81で73を越えています。
73が素数であることを確定するには、
ルート73以下の整数まで割っていけば良いのです。

では、この方針で素数生成プログラムを考えます。
はじめは、100以下の素数を生成させましょう。
素数
表示は、10個ごとに表示させるようにして下さい。
条件は、Sub CommandButton1_Clickで1から100までの整数iを発生させて、
素数である場合にSub CommandButton1_Clickにおいて表示させるものとします。
発生させた整数が素数であるかはファンクションプロシージャsh(i)で判定させ、
shは素数の場合は1を返し、素数でない場合には0を返すようにして、
戻り値が1のときだけSub CommandButton1_Clickにおいて表示させればよいのです。
尚、iのルートを求めるにはInt(Sqr(i))です。


皆さん考えてみて下さい。

もちろん、これは最速ではありませんので
話の進行と共にどんどん改良していきます。


第1話へ 第3話へ
004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ