午後のひとときに素因数分解や倍数判定のテクニックについて考えてみる。
問題
999975を素因数分解せよ。
という問題があったとして、皆さんはどんな値から割って行きますか?
末尾が5だから、5の倍数。
すべての桁の和が3の倍数なので、3の倍数。
・・・
まぁ、いろいろとあるでしょう。
では5で割ってみましょうか。
999975÷5=199995
また5で割り切れますね。
199995÷5=39999
3で割り切れますね。
39999÷3=13333
さて、次はどうしましょう。
3から始めたとしても、結果は同じです。
5で割り切れる、3で割り切れるということは、一旦置いておいて、
まず、999975をみて、1000000-25だということが想像出来ればしめたものです。
999975=1000000-25
=10002-52
=(1000+5)(1000-5)
=1005×995
ともに5で割れるから、
=5×201×5×199
201は3で割れるから
=5×3×67×5×199
小さい順に並べ替えて、
=3×52×67×199
まぁこれでもいいんだけど、
999975=1000000-25
=10002-52
=(1000+5)(1000-5)
この段階で5で割って、
=5×(200+1)×5×(200-1)
=5×201×5×199
と考えるほうが、楽だし速いですよね。
さて、201や199の素因数分解ってどうするの?
ってなるだろう。
201は3の倍数であることは2+0+1=3から解りますので
201=3×67
は容易に出せるでしょう。
199が合成数か素数かを考えるとして、
nの素数判定は、2から√nまでの素数で割り切れるかどうかを調べればよい。
というわけで、199は2、3、5、7、11、13で割り切れるかを調べればよいとなって、
2、3、5はすぐに割り切れないことが解って、7、11、13で割り切れるかを考えることになる。
7の倍数判定として、いろいろとあるが、199と比較的小さな値なので、
50=49+1=72+1
を使うことにする。
199=3×50+49=3×(72+1)+49=3×72+3×1+49≡3+49≡3 (mod 7)
もしくは、
199=4×50-1=4×(72+1)-1=4×72+4×1-1≡4-1≡3 (mod 7)
という計算になるが、
199=4×50-1≡3 (mod 7)
と余計な計算は省けるので、3は7で割り切れないので、199は7の倍数ではない。
11の倍数判定は、奇数番目だけを抜き取ったの値と偶数番目だけを抜き取ったの値の差が0を含む11の倍数なら11の倍数というのをつかって、
199は19と9で差が10なので、11の倍数ではない。
13の倍数判定は、まぁ13で割り算すればいいかな。
こんな七面倒臭いことをやることも実はないのです。
比較的大きい値の7、11、13の倍数判定として、7×11×13=1001を使うのが楽です。
999975を下から3桁ごとに区切って、符号を変えていく。
-999+975=-24
で24は7でも11でも13でも割り切れないので、7の倍数、11の倍数、13の倍数でないことがが解ります。
理屈を書くと、
ABCDEFという6桁の数があったとして、
1000×ABC+1×DEFと書き換えることが出来ますね。
もし、ABCDEFが1001で割り切れるならば、
ABC=DEFでなければなりません。
これを利用して、4桁以上の自然数の1001の倍数判定は、3桁毎に区切って、下から+、-、+、-、…と符号を付けていくことになります。
999975≡-999+975≡-24 (mod 1001)
つまり、999975の段階で7でも11でも13でも割り切れないことが解って、
199の判定をするまでもなかったわけです。
あくまでもテクニックとして、いろいろと引き出しを持っておくのも良いかとは思うが、策士策に溺れるってこともあるので、どのタイミングでどの引き出しを使うのかってのは、1分1秒を争うような場合においては、結構重要だって話しです。
ではでは