階乗と二進法
(本日の数学ネタの記事は、高校生向けです。高校1年生までの知識を前提とさせていただきますので、高校2年生以上のかた向けだと思いますね。もしも、「それでは読めない」とお思いになったかたは、よろしければ以下のきのう書いた記事をお読みくださいね。以下の記事は小学6年生から読めますので…。)
私はかつて中高の数学の教員でした。テストで以下の問題を出したことがあります。
「(10進法で表される)100!という数を2進法で表したとき、末尾に0がいくつ続くか」。
きょうは、これを解いてみましょう。(あまり数学的に意味のない問題で申し訳ないです。問いの立て方がすでに受験数学っぽくてあまり学問的ではないですな。)
まず、100!というのは、100の階乗であり、1×2×…×99×100という数のことです。たくさんの数を掛け合わせてできている数です。10進法で表しても末尾にたくさんの0が続くことになります(10の倍数であり、100の倍数であり、1000の倍数でもありますからね)。2進法で表しても、末尾にたくさんの0がつくことでしょう。では、いくつ続くでしょうか。
2は、2進法で表すと「10」です。末尾に0がひとつつきます。4を、2進法で表すと「100」です。末尾に0がふたつつきます。8を、2進法で表すと、「1000」です。つまり、末尾に0が3つ続きます。つまり「2進法で表したとき、末尾にいくつ0が続くか」というのは、「約数として2をいくつ持っているか」ということになります。つまり、100!は、約数として2をいくつ持っているか、という問題であることがわかります。
ですから100!を素因数分解すればよいのですが、1×2×…×99×100ですから、なかなか大変ですね。この1から100までの数を相手にしましょう。2を倍数として持っているのは、2、4、6、8、…、98、100ですね。偶数ですね。50個あります。そのうち、4の倍数でないものを除きましょう(4の倍数はまたあとで数えましょう)。すると、2の倍数は100÷2=50個で、4の倍数は100÷4=25ですから、「1から100までの数のうち、2の倍数であって4の倍数でないもの」は、50-25=25個です。まず、ここまでで素因数として2を持っている数が25個あります。
つぎに、素因数として2をふたつ持っている数を洗い出しましょう。4の倍数ですね。ただし8の倍数は2を約数として3つ持っていますので、除きましょう。1から100までの数のうち、4の倍数であって8の倍数でないものを数えましょう。4の倍数は100÷4=25個、8の倍数は100÷8=12あまり4で、12個です。つまり、25-12=13で、1から100までの数のうち、約数として2を2つ持っていて3つは持っていない数は13個です。
つぎに、1から100までの数で、素因数として2を3つ持っている数を探しましょう。8の倍数であって16の倍数でないものです。8の倍数は12個で、16の倍数は100÷16=6あまり4ですから6個です。つまり、1から100までの数で、約数として2を3つ持っていて4つは持っていない数は、12-6=6個です。
無駄に長くなってすみませんね。1から100までの数で、素因数として2を4つ持っている数を数えます。16の倍数であって32の倍数でないものです。16の倍数は6個で、32の倍数は100÷32=3あまり4ですから3個です。つまり6-3=3個あります。
では、素因数として2を5つ持っている数は?32の倍数であって64の倍数でない数ですね。32の倍数は3個、64の倍数は1個ですから、求める個数は3-1=2個です。
64の倍数は1個ですね。128の倍数は1から100までのあいだにはありません。
そこで、100!は素因数として2をいくつ持っているかといいますと、25+2×13+3×6+4×3+5×2+6×1=97です。私の計算が間違っていなければ、100!は素因数として2を97個、持ちます!
(これを教科書では、50+25+12+6+3+1=97って数えているのですよね。最初、なにをやっているのかさっぱりわかりませんでしたよ。ようするに足す順番を変えているというか、こちらのほうが計算は速いですよという意味のようですが、最初、意味がわかりませんでした。)
というわけで、100!を2進法で表すと、末尾に0が97個、続きます。ん?これは「97個以上続く」ことしか言っていないのではないか、ですって?私もそんな気がしたのですが、よく考えてみると、100!は素因数として2を97個しか持っていないから、「97個しか続かない」ということも言っているのですね。98桁目は「1」なのです。(あっていますか?)
さて、これだけの問題でした。くだらなくてすみません。しかし、これってセンター試験の過去問で見たことがあるっていう人もいらっしゃるかもしれませんね。じつは、これも、きのうの記事(この記事の最初にリンクをはりました。「n枚の平面によって空間は最大でいくつの部分に分割されますか」という問題を2009年ごろに定期テストで出したら、それは2019年の東工大の入試で出たという話です。よろしければお読みくださいね)に引き続き、大学入試問題を当てちゃった!という話なのです。
この問題は、そのものずばりを当てたわけではありませんね。2017年のセンター試験の問題は以下のようです。「1188のすべての正の約数の積を2進法で表すと,末尾には0が連続して( )個並ぶ。」以下のサイトなどご参照。ご覧にならなくてもいいですけどね。でも、2進法で表して、末尾に0がいくつ続くか、というところなど、いっしょじゃないですか。
ただし、センター試験は、この問題は、慎重に「誘導」して、「最後の問題」にしてあります。私は、この問題は、「小問」で出してしまったのです!「小問」って、地方差のある言いかたですか?「小さい」問題で、テストの最初のほうの問題で、「答えがあっているか否かだけでマルバツだけ打つ問題」です。
なぜかと言いますと、まず授業では、「100!の階乗(を10進法で表すと)は、末尾にいくつ0が続くか」という問題を習い、ついでn進法を習ったわけです。だから、出題者の発想としては今回の問題はアリです。そして、10進法でいくつ末尾に0が続くか、という問題は、10をいくつ約数として持つかを調べなくてはならなくなり、10を素因数分解すると2×5となり、したがって、2と5で調べなければならなくなるのです。それより、今回の問題は2だけで調べればいいのだから、10進法のときの問題よりずっとやさしいはず!と思った私はこれを小問にしてしまったのですね。これは、教員として最後の年度であった2016年の問題で、教員として作った最後のテストです(そのあと、私には授業は任せられないということで、授業を奪われ、その年で教員を辞めさせられました)。最後までダメ教員でしたね(笑)。
本日はあまりおもしろくなかったですかね。ごめんなさいね。そう毎回、おもしろいのは書けないですよ(笑)。ときどきくだらないのも載せますが、コンスタントに算数や数学の記事は載せていきたいです。