


 
 
 
 
 
 
 |
まずは基礎から始めます。
★素数
素数とは、1以外の、それ自身以外で割り切れない正の整数値の事。それでは、素数を表示するプログラムを考えます。
1〜100の間にある素数を表示するプログラムです。割り切れるかどうかは、余りを出す演算子modを使って、余りが0であれば割り切れるという事。例えば、11が素数かどうかをチェックするには、
11 mod 2 = 1
11 mod 3 = 2
11 mod 4 = 3
11 mod 5 = 1
11 mod 6 = 5
11 mod 7 = 4
11 mod 8 = 3
11 mod 9 = 2
11 mod 10 = 1
となり、余りがずっと0以外になりますから、11は素数という訳です。また、15が素数かどうかをチェックすると、
15 mod 2 = 1
15 mod 3 = 0
となり、3で割り切れますので、15は素数ではない事が分かります。ですので、これを単純にループさせてチェックさせればOKです。 |
この例では、100まで、という少ない量ですのでまだいいですが、例えば、100000まで、等となると時間が掛かります。高速化をするために、4以降の2の倍数値は素数ではないので除外するとか等の"かわし技"がテクニック/アルゴリズムの効率化となります。
★素因数分解
素因数分解とは、素因数の積の形で表す事、つまり、ある正の整数値を、素数×素数×……という表示する事です。概念としては、ある数値を、「小さい素数から順に割っていく」という事ですが、それならば素数を算出して、それから作業を、という事をせねばならないのでしょうか?
いやいや、そんな事はありません。プログラムを単純にしたければ、小さい数値から割り算していけばいいのです。例えば、100という数値の素因数分解は、「2×2×5×5」となりますが、
@100をまず2で割る。結果は50。
A50を2で割る。結果は25。
B25を2で割る。割り切れないので3で割る。割り切れないので4で割る。当然、割り切れないので5で割る。結果は5。
CBと同様。自分自身で割る事になるので終了。
当然、「4で割る処理」が無駄になりますが、高速化をしたければ、「2の倍数で割る作業はしないように」という判断文を入れる等をすれば良いでしょう。
アルゴリズムは、問題解決手法、つまり、計算ロジックやコーディングのことを指しますが、問題解決手法には、いろいろなパターンがあり、どういう手法を使うのか、は、システムエンジニアやプログラマが考えて、よりよい手法を採るのが通例です。
高速化が必要であれば、高速に行う手法を考慮せねばなりませんし、後々のメンテナンス性が大事であれば、なるべくシンプルな手法を使ったり、的確な注釈文を入れておく等の処置も必要でしょう。「真実は1つ」ではありません。より良い手法を模索するのも大切ですが、納期が差し迫っているのであれば、考える時間よりも、やりやすい手法を選択する、というのも現実的には必要となってきます。
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
▲PREV
▼NEXT
CAD作ろ!
|