【ITニュース解説】The Curious Case of 1/998001: Missing Number & Math Guide
2026年10月03日に「Dev.to」が公開したITニュース「The Curious Case of 1/998001: Missing Number & Math Guide」について初心者にもわかりやすく解説しています。
ITニュース概要
分数1/998001の小数展開は、000から始まる3桁の数字を連続して生成する。これは999の2乗が分母となるためだが、不思議なことに「998」の数字だけがスキップされる。後続の数の繰り上がりによって998のブロックが変化するためだ。数学的パターンと計算の妙がわかる。
ITニュース解説
1/998001という分数を見ると、一見するとただの複雑な数字に思えるが、実はその小数展開には驚くべき秘密が隠されている。この分数を小数に変換すると、0.000001002003004005006...と続く。よく見ると、000から始まり、001、002、003、004、005...と、3桁の数字が順番に連続して現れることに気づく。これは、0から999までのすべての3桁の整数が、規則正しく並んでいくという非常に珍しい現象である。
この不思議な現象の背景には、数学における特定のパターンがある。分母の998001という数字は、実は999を二乗したものである。つまり、1を999の二乗で割っていることに相当する。このような「9が並ぶ数の二乗」が分母になる分数には、似たような興味深い性質が見られる。
例えば、1/9という分数では、0.111111...と1が繰り返される。分母を99にすると1/99となり、0.010101...と01が繰り返される。さらに1/999では、0.001001001...と001が繰り返される。このように、「1を9がいくつも並んだ数で割る」と、その9の数に対応した桁数の数字が循環するパターンが現れる。
ところが、これらの分母を二乗すると、循環するだけでなく、連続する数字が生成されるという、さらに特別な現象が起きる。例えば、1/9を二乗した1/81を見てみよう。1/81は0.012345679012345679...と続く。ここでは、0から9までの1桁の数字が順番に現れるが、なぜか「8」だけがスキップされている。同様に、1/99を二乗した1/9801では、0.000102030405...9697990001...と、00から99までの2桁の数字が順番に現れるが、ここでも「98」だけがスキップされている。
そして、本題の1/999を二乗した1/998001も、この法則に従っている。000から999までの3桁の数字が連続して現れるが、例外的に「998」だけがスキップされる。つまり、000, 001, ..., 996, 997, 999, 000, 001...という並びになる。
この現象を数学的に証明するには、少し専門的な「テイラー展開」という手法が使われる。簡単に言えば、特定の形をした分数を無限の足し算(級数)の形で表現する計算方法である。 $1/(1-x)^2$という形は、$1 + 2x + 3x^2 + 4x^3 + \dots$と展開できる。ここで$x$に$1/1000$を代入してみる。すると、$1-x$は$1-1/1000 = 999/1000$となり、$(1-x)^2$は$(999/1000)^2 = 998001/1000000$となる。 この逆数を取ると、$1/(1-x)^2 = 1000000/998001$となる。 これを元の級数展開に当てはめると、$1000000/998001 = 1 + 2/1000 + 3/(1000^2) + 4/(1000^3) + \dots$ となる。 両辺を$1000000$で割ると、$1/998001 = 1/1000^2 + 2/1000^3 + 3/1000^4 + \dots$ となる。 この式を小数点以下で書くと、 $1/1000^2$は0.000001 $2/1000^3$は0.000000002 $3/1000^4$は0.000000000003 となり、これらを足し合わせると、0.000001002003004...と、小数点以下に000, 001, 002...というブロックが生成されていく仕組みが数学的に説明できる。
では、なぜ「998」だけがスキップされてしまうのだろうか。これは、連続する数字が単純に並ぶのではなく、「桁上がり(キャリー)」が発生することによる。 先ほどの級数展開では、それぞれの項が対応する3桁のブロックにその項の数(1、2、3、...)を加えていく。 例えば、...995, 996, 997, 998, 999...と順番にブロックが並んでいくはずだったとする。 しかし、$n=999$のブロックの次に、$n=1000$のブロックが来る。このとき、「1000」という数字は3桁を超えているため、先頭の「1」が前のブロックに桁上がりとして伝播する。 具体的には、$n=1000$の「1」が$n=999$のブロックに加算される。つまり、$999+1=1000$となる。この「1000」もまた3桁を超えるので、その「1」がさらに前の$n=998$のブロックへと桁上がりする。 結果として、$n=998$のブロックは、この繰り上がってきた「1」を受け取り、$998+1=999$となる。 このようにして、本来「998」と表示されるべき場所が、一つ手前のブロックからの桁上がりによって「999」に変わってしまうのである。これにより、998という数字は、まるで存在しなかったかのようにスキップされてしまうのだ。
このような数学の奥深さは、単なる数字遊びにとどまらない。システムエンジニアを目指す初心者にとっても、このような「規則的なパターン」や「予測可能な数値の振る舞い」は非常に重要である。なぜなら、これらの性質はITの様々な技術に応用されているからだ。
例えば、コンピューターで使われる「疑似乱数生成」では、完全にランダムではないが、ランダムに見える数字の並びを作り出すために、このような周期性や規則性を持つ数列が利用されることがある。また、デジタル信号処理における「デジタルフィルター」の設計や、データ通信でのエラーを検出して修正する「誤り訂正符号」といった分野でも、特定の周期的なパターンや密度の高い数列が必要とされる場合がある。
今回のような数字の不思議な現象は、まさにそうした技術の基礎となる数学的思考とパターン認識の重要性を示している。Pythonのようなプログラミング言語を使って実際に計算し、このような現象を目で確認することもできるため、理論と実践を結びつける良い学習機会にもなるだろう。高精度な計算ができる decimal モジュールを使えば、実際に「998」がスキップされている様子を自分の目で確かめることができる。
このような数学的な発見が、複雑なITシステムの中でどのように役立っているのかを理解することは、将来のシステムエンジニアにとって、問題解決能力や新しい技術を開発する上で大きな強みとなるはずだ。