科学・技術
階乗の大きさはどれくらいか?
How Big Are Factorials? (eli.thegreenplace.net)
要約
この記事では、電卓やコンピュータを使わずに階乗の大きさを推定する方法について解説しています。まず、n!の桁数を推定する近似式を示し、具体例として52!の桁数を計算しています。次に、ガンマ関数が階乗の正の実数への補間であることを説明し、スターリングの近似式の導出過程をガンマ関数から解説しています。最後に、スターリングの近似式を用いて階乗の桁数を推定する方法を示しています。
全文翻訳
先日、52!(52の階乗)の大きさがどれくらいになるのか疑問に思い、それが電卓やコンピュータなしでどのように推定できるのかを考え始めました。
驚くべきことに、階乗のサイズ(桁数)をかなり正確に推定するための、かなり興味深い数学が存在することがわかりました。
この投稿では、まず推定方法を述べ、もし興味があれば、数学的な背景を読むことができます。
早速ですが、近似式は次のとおりです。
n!の桁数 ≈ n log10(n/e) + 2
例として、元の質問を使い、52!について推定してみましょう。
さて、52をeで割ると…20くらいでしょうか?そしてlog10(20)は約1.3[1]です。したがって、推定値は次のようになります。
52!の桁数 ≈ 52 * 1.3 + 2 ≈ 69
実際の答えは68なので、これは非常に近いです!このような推定では、巨大な数を扱う場合、数桁の誤差は通常問題になりません。
ガンマ関数
実数 n > 0 に対して、ガンマ関数は次のように定義されます。
Γ(n) = ∫[0, ∞] x^(n-1) e^(-x) dx
この積分は一般的なケースでは解析的な表現を持ちませんが、利用できる非常に便利な性質があります。
Γ(n+1) がどうなるか見てみましょう。
Γ(n+1) = ∫[0, ∞] x^n e^(-x) dx
ここで、次の置換を用いて部分積分を行います。
u = x^n, dv = -e^(-x) dx
すると、
du = nx^(n-1) dx, dv = e^(-x) dx
したがって、
Γ(n+1) = [ -x^n e^(-x) ]_[0, ∞] - ∫[0, ∞] (-e^(-x)) n x^(n-1) dx
= n ∫[0, ∞] x^(n-1) e^(-x) dx
しかし、最後の積分はΓ(n)そのものであることに注意してください。したがって、次のことを示しました。
Γ(n+1) = nΓ(n)
Γ(1)も計算してみましょう。これは解析解を持つ特別なケースです。
Γ(1) = ∫[0, ∞] e^(-x) dx = [ -e^(-x) ]_[0, ∞] = 1
これは帰納的議論を確立するのに役立ちます。
Γ(2) = 1 * Γ(1) = 1!
Γ(3) = 2 * Γ(2) = 2!
Γ(4) = 3 * Γ(3) = 3!
...
Γ(n+1) = n * Γ(n) = n!
言い換えれば、ガンマ関数はすべての正の実数における階乗の補間です。
この関数は急速に成長するため、y軸は対数スケールになっています。
スターリングの近似
スターリングの近似に遭遇したことがあるかもしれません。
n! ≈ √(2πn) * (n/e)^n
これは、小さなnでも比較的うまく機能する優れた近似です。
このセクションでは、スターリングの公式がガンマ関数からどのように導出されるかの概要を説明します。
n! = Γ(n+1) = ∫[0, ∞] x^n e^(-x) dx
まず、被積分関数を少し操作します。
n! = ∫[0, ∞] e^(n ln x) e^(-x) dx
ここで、x = ny と変数変換を行います。これは dx = n dy を意味します。
n! = ∫[0, ∞] n e^(n ln(ny) - ny) dy
= n e^(n ln n) ∫[0, ∞] e^(n(ln y - y)) dy
これらのステップにより、積分はラプラスの方法を適用できるようになります。この方法は、次のような形式の定積分を近似できます。
∫[a, b] e^(nf(x)) dx
ここで、f(x)は2回微分可能な関数であり、nは大きな数です。
ラプラスの方法によれば、このような積分は次のように近似できます。
∫[a, b] e^(nf(x)) dx ≈ √(2π / |n f''(x0)|) * e^(n f(x0))
ここで、x0はf(x)の最大値です。
この方法を、n!の最新の式(ダミー積分変数をxに戻します)に適用してみましょう。
n! = n e^(n ln n) ∫[0, ∞] e^(n(ln x - x)) dx
この場合、f(x) = ln x - x です。
この関数は2回微分可能であり、x0 = 1 で最大値をとることは簡単に示せます。
さらに、
f(x0) = -1
f''(x0) = -1
これらをラプラスの近似式の適切な場所に代入すると、次のようになります。
n! ≈ n e^(n ln n) * √(2π / n) * e^(-1)
≈ √(2πn) * e^(n(ln n - 1))
≈ √(2πn) * (n/e)^n
スターリングの近似からの桁数
スターリングの公式の10を底とする対数を取ることで、n!の桁数を計算できます。
n!の桁数 ≈ log10(√(2πn) * (n/e)^n)
≈ log10(√(2πn)) + log10((n/e)^n)
≈ log10(√(2πn)) + n * log10(n/e)
最初の項にはnがかかっていないことに注意してください。したがって、nが増加するにつれて、この項はますます目立たなくなります。
それでも、数桁を追加するため、より正確な近似が必要な場合は考慮に入れるべきです[4]。
[1] log10の計算のメンタル・トリックは別のトピックですが、log10(2)=0.3、log10(3)=0.5を覚えておき、そこから様々な対数法則を使って倍数を推定すると非常に役立ちます。
[2] 実際には、ガンマ関数は複素数に対しても定義されていますが、ここでは実数について話すだけで十分です。
[3] この近似がなぜ機能するのかを詳しく説明したいところですが、この投稿のウサギ穴はすでに十分に深いです!
[4] nが約1600未満の場合、2桁追加され、それ以降はさらに追加される可能性がありますが、nが160000になるまでは3桁を超えることはありません。
1600!(ちなみに約4450桁)やましてや160000!の桁数を推定したい人がいる理由は不明です。
コメントについては、メールで送信してください。