2, 4, 8, 16,… の倍数判定法

高校の数学Aの教科書に、ある自然数Nが2の倍数かどうかを判定する方法が説明されていて、

Nの一の位の数(0~9)をaとすると、適切にkを選べば、

N=10k + a

と表現できて10kは必ず2の倍数なので、一の位の数のaが2の倍数かどうかだけ見ればNが2の倍数かどうかを判定できるというものが説明されています。

で、ある自然数Nが4の倍数かどうかを判定するときは、おなじような方法で、

N=100k + a

として、下2桁aが4の倍数かを調べればよいとされています。

で、練習問題に8の倍数を判定する方法を答えよとなっているわけです。

教科書にこういう感じで問題がでてくるときは、直前の方法を使ってその延長線上で解けることがおおいです。

で、結論からいうと1000は8の倍数なので、8の場合は下3桁を調べればよいわけです。

で、ちょっとおもしろいなと思ってその仕組みみたいなのを考えてみました。

8=2×2×2

これが、10とか100とか1000とかの約数ならおいしいわけですね。

で、2というのは5を掛けると10になってくれるので、

8×5×5×5=(2×5)×(2×5)×(2×5)=10×10×10=1000

この感じで、2^n は10^nの約数なので、ある自然数Nが2^nの倍数かどうかの判断は、下n桁だけ見ればよいとなります。

数学に詳しい方ならわらっちゃうほど簡単なことなんでしょうけど、私はこれを”発見”してすこしうれしかったです。

プログラミングでアルゴリズムに落とし込むとしたら、もっと効率的なのがあるのだなとちょっとウェブをサーチして思いました。

倍数と約数

倍数と約数は自然数(1, 2, 3, …)で考えると自明といえるほどわかりやすい概念ですが、高校数学では整数(…, -2, -1, 0, 1, 2, …)に拡張して考えます。

で、私もいろいろ0がからむときとか混乱が生じたんですが、最終的に、

a=kb

という等式に、適切な整数をa, k, bに入れてそれが成立すれば、aはbの倍数、bはaの約数と理解すればよいというところにたどり着きました。(教科書にはなから書いてあるのですが理解が追い付かなくて(笑))

この考え方からすると、a=0, k=0, b=任意の整数とすると、0はすべての整数の倍数といえることなど興味深いことがわかります。

で、a=0, b=0とすると、kが何であっても等式は成立するので0は0の約数と考えられるということになります。約数というとなんか割り算的な雰囲気があるので、0で割るという数学のタブーを犯している感じがあって、wikipediaによるとたしかに0の約数に0を含める考え方と除外する考え方があるようです。

いや~、数学は面白いな…という感覚を味わっています。受験と関係なく数学に出会いたかった…

三次元空間では垂直≠直交

たぶん私が現役の中高生だったころは、区別できていたんでしょうけど、数年前に教科書を読みながら数学を思い出すまで、この違いをすっかり忘れていました。

端的に言うと、3次元空間でねじれの位置にある2直線が垂直であることもありえるということですね。ただこの2直線は直交するとは言えません。


たしかに数研出版の高校生向け数学の教科書の記述では、上記のように理解できるのですが、高等数学ではもっといろいろあるのかなとWikipediaの記述を読んで思いました。