Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

立方数かの判定を手計算で行うことを考える

$
0
0

今回は、立方数について考えてみる。

ある4桁以上6桁以下の自然数nがあったとき、それが立方数かを手計算で判定することを考える。
もし自然数nが立方数であるならば、nの3乗根を示せ。

どんなアルゴリズムを使えばよいのだろうか。

まず、1から10までの立方数を、予め求めておき、立方数の下1桁を抜き出す。

 

aa^3a^3 mod 10
111
288
3277
4644
51255
62166
73433
85122
97299
1010000


1列目と2列目のそれぞれの下1桁を見比べると、
1⇔1
2⇔8
3⇔7
4⇔4
5⇔5
6⇔6
7⇔3
8⇔2
9⇔9
0⇔0
のような写像をしている。
よくみると、
自分自身に行くのが、
{ 0, 1, 4, 5, 6, 9 }
(10-自分自身)に行くのが、
{ 2, 3, 7, 8 }
と2つのグループに分けられるということ。
ここで、2列目の末尾1桁を3列目に示す。

これが下準備です。
記憶力のある人ならば暗記出来る量でしょう。

ある6桁の自然数ABCDEFがあります。

1) 立方数かの判定として、まず下から3桁で分けます。
ABC DEF

2) Fを先の表の3列で探し、1列目の値を一の位とします。

3) ABCが2列目のどこの間に存在するのかを調べ、1列目の値を十の位とします。
a^3≦ABC<(a+1)^3
aを求めます。

4) 十の位と一の位で2桁の値が求まりましたので、これを3乗します。
これが、ABCDEFと等しければ、ABCDEFは立方数で、ABCDEFの三乗根であるということです。

試してみます。

195112
195 112
2→8
125≦195<216
125→5
52^3=195112=195112 立方根 三乗根は52

17576
17 576
6→6
8≦17<27
8→2
26^3=17576=17576 立方根 三乗根は26

123456
123 456

6→6
64≦123<125
64→4
46^3=97336≠123456 立方根ではない

手計算で、結構簡単に判定出来ますね。

実質4桁未満であっても、そこまでは準備しているので求まりますね。


さて、こういったアルゴリズムを考えていると、
人間的には簡単なこと、
コンピュータ的には簡単なこと、
というものは、違うということを再認識する。

今回のアルゴリズムは人間的には簡単な方法であるが、
プログラミングでやると、これは殊の外手間が掛かっていることが解る。

つまり、人間とコンピュータでは得意とするものが根本的に違うということでもあります。

私が数学で解を見つける場合と、プログラミングで解を見つける場合があるのは、それらの守備範囲が似ているようで似ていないくて、アプローチは案外違っていることに他なりません。

まったく同じアルゴリズムを使っていたとしても、
私が始めて買った30年前のパソコンでは1日経っても答えが導き出せなかったことが、
今のパソコンでは1秒も掛からずに答えを導き出してしまうこともあります。

ただ、コンピュータの性能におんぶにだっこというのは、プログラマとしてはいかがなものかと考えます。

限られたメモリ空間、ディスク容量を使ってどうにかして答えを素早く導き出したい。
そのためのアイディアや工夫に満ちあふれていました。

今は、マシンパワーを使って力任せに解を解くことも出来てしまいますし、当時のアイディアや工夫なんて蹴散らしてしまうほどです。

だからと言って、力任せのプログラムばかりを書いていると、なんだか負けた気がするんです。

ハードウェアは進化し続け、コンパイラの性能も進化し続けています。

だからと言って、そこにあぐらをかいていて良いのかというと、そうではないでしょう。

それを使う人間も、進化するべきですよね。


ではでは


Viewing all articles
Browse latest Browse all 5376

Trending Articles