今回もかけ声はαριθμοι κυβερυουν συμπανのコマネチ大学数学科。顧問は中村先生。

今回はプログラマーにとってもうれしい問題。

問題:
1から1000までの番号とスイッチがついた電球があります。まず、1の倍数の電球のスイッチを押し、次に2の倍数のスイッチを押し....これを1000回行った後、点灯している電球の数はいくつあるでしょう?ただし、最初の状態では電球は消灯状態です。

この問題は「1から1000までの数において、1とそれ自身を含む因数の数が奇数のものはいくつあるでしょう?」という問題に還元される。

エレガントな解答に行く前に、コマ大生たちの足跡をjavascriptでたぐってみよう。

どんな数が現れただろう?そう。平方数なのである。よって問題は「1から1000までの間に、平方数はいくつあるか?」に還元されて、あとは1000の平方根を取って少数以下を切り捨てれば、答えの31が出るという仕掛け。マス北野と女子東大生チーム、見事正解。

ところで、第12講では、「約数の和が奇数になるのは、常に平方数である」ということをきちんと証明していない(直感的な説明は中村先生がしていたが)。なぜそうなのかは、↑の「素数入門」にも載っている以下の定理を使うことが出来る。

pp.195

正整数nの標準素因数分解を、
n = paqbrc... とすると、 [因数の数]σ0(n) = (a + 1)(b + 1)(c + 1)...

σ0(n) が奇数ということは、 (a + 1)(b + 1)(c + 1)...の全ての項が奇数ということなので、a,b,c....は全て偶数。よってpaqbrc...は平方数となる。

そんなわけで、因数の不思議についてもっと知りたい人は是非本書を入手のこと。以前も紹介したが、手頃な問題ということで、ここで改めて紹介する次第。

Dan the Auditor