階乗計算ツール
0から170までの任意の数の階乗を計算します。計算結果、桁数、計算過程、二重階乗、完全順列(撹乱順列)を確認できます。
階乗の完全ガイド:n!、二重階乗、完全順列を理解する
階乗は数学における最も基本的な演算の一つです。n!(「nの階乗」と読みます)は、1からnまでのすべての正の整数の積を表します。例えば、5! = 5 × 4 × 3 × 2 × 1 = 120です。シンプルな定義にもかかわらず、階乗関数は基本的な組合せ論や確率論から、解析学、代数学、数論の高度なトピックまで、非常に広範な数学分野に登場します。数学、コンピュータサイエンス、統計学、物理学を学ぶすべての方にとって、階乗の理解は不可欠です。
このガイドでは、階乗の定義と性質、二重階乗や完全順列などの関連する関数、実用的な応用、そして非常に大きな値を扱う際の計算上の注意点について解説します。
定義と基本的な性質
非負整数nの階乗は、再帰的に n! = n × (n-1)! と定義され、基底条件として 0! = 1 です。この基底条件は恣意的なものではなく、空積(因数が0個の積)が1に等しいという慣例に基づいており、組合せ論の公式の整合性を保っています。例えば、0個の物を並べる方法はちょうど1通り(何もしない)です。
階乗は超指数関数的に増大します。10!は約360万ですが、20!は2.4×10^18を超え、100!は158桁の数になります。この急速な増大により、入力値がそれほど大きくなくても天文学的な結果が生じます。JavaScriptでは、標準的な64ビット浮動小数点数で精度を失わない最大の階乗は170!(307桁)です。それ以上ではBigIntまたは任意精度ライブラリが必要になります。
スターリングの近似
階乗は非常に急速に増大するため、近似式があると便利です。スターリングの近似は、大きなnに対して n! が sqrt(2*pi*n) × (n/e)^n にほぼ等しいことを述べています。この近似はnが大きくなるほど正確になり、統計力学、情報理論、漸近解析で広く使われています。
実用的には、スターリングの公式を使えば、完全な値を計算せずにn!の桁数を推定できます。桁数はおよそ n × log10(n/e) + 0.5 × log10(2*pi*n) です。これは、完全な乗算を行わずに階乗のオーダーを知りたい場合に有用です。日本の高校数学や大学の数学でも、スターリングの近似は重要なトピックとして扱われています。
二重階乗 (n!!)
非負整数nの二重階乗(n!!と表記)は、nと同じ偶奇性を持つnまでのすべての正の整数の積です。偶数nの場合:n!! = n × (n-2) × (n-4) × ... × 4 × 2。奇数nの場合:n!! = n × (n-2) × (n-4) × ... × 3 × 1。慣例として 0!! = 1、1!! = 1 です。
二重階乗はさまざまな数学公式、特に組合せ論や特定の積分の計算に登場します。例えば、円周率のウォリス積には二重階乗が含まれ、n次元球の体積の計算でも自然に現れます。二重階乗と通常の階乗の関係は次の通りです:偶数 n = 2k の場合、(2k)!! = 2^k × k!、奇数 n = 2k+1 の場合、(2k+1)!! = (2k+1)! / (2^k × k!) です。
完全順列(撹乱順列)と !n
nの完全順列(サブファクトリアル、!nと表記)は、n個の要素の撹乱順列の数、つまりどの要素も元の位置に残らない順列の数を数えます。例えば、!3 = 2 です。{1, 2, 3}の撹乱順列は {2, 3, 1} と {3, 1, 2} の2つです。
完全順列は漸化式 !0 = 1、!1 = 0、!n = (n-1) × (!(n-1) + !(n-2)) で計算できます。nが大きくなると、!n / n! の比は 1/e ≈ 0.3679 に近づきます。つまり、大きな集合のすべての順列のうち約36.79%が撹乱順列です。
撹乱順列は確率論(帽子交換問題)、暗号理論、組合せ解析に応用されます。古典的な帽子交換問題では、n人がそれぞれ帽子を山に置き、ランダムに1つ選んだとき、誰も自分の帽子を取らない確率は !n / n! で、これは 1/e に近づきます。
階乗の応用
階乗は数学のあらゆる場所に現れます。組合せ論では、n個の異なる物を並べる方法の数はn!(順列)です。二項係数 C(n, k) = n! / (k! × (n-k)!) は、n個からk個を選ぶ方法の数を数え、確率論と二項定理の基本です。階乗は指数関数、三角関数などのテイラー展開にも登場します。例えば、e^x = x^n / n! の和(n=0から無限大)です。
コンピュータサイエンスでは、階乗はアルゴリズムの解析に現れます。n個のアイテムの可能な順序の数はn!であり、比較ベースのソートアルゴリズムの理論的下限を定義します。階乗時間計算量 O(n!) の問題は、わずかに大きなnでも計算不可能になるため、最適化やオペレーションズリサーチでは効率的なアルゴリズムとヒューリスティクスが重要です。
確率・統計学では、階乗は順列、組合せ、ポアソン分布や多項分布などの確率分布の計算を支えています。ベイズ推論や尤度の計算でも中心的な役割を果たします。日本の大学入試では、順列・組合せの問題で階乗の理解が必須とされています。
ガンマ関数:階乗の拡張
階乗関数は非負整数のみに定義されていますが、ガンマ関数はこれを実数や複素数に拡張します。ガンマ関数は非負整数nに対して Γ(n+1) = n! を満たし、非正整数を除くすべての複素数に対して定義されています。この拡張は、非整数値で階乗的な計算が生じる高度な数学、物理学、工学において重要です。
例えば、Γ(1/2) = sqrt(π) であり、一般化された意味で (-1/2)! = sqrt(π) となります。ガンマ関数はn次元球の表面積と体積の公式、確率分布(ガンマ分布、ベータ分布)、理論物理学の多くの分野に登場します。
計算上の注意点
小さな値の階乗計算は簡単ですが、大きな値では数が膨大になります。この計算ツールは0から170までの値をサポートし、正確な整数演算のためにBigIntを使用して完全な結果を文字列として表示します。n = 170を超えると結果は標準的な64ビット浮動小数点数の範囲を超えますが、BigIntは任意の大きさの整数を扱えます。
数百万の要素を含む組合せ計算など、非常に大きな階乗を必要とする応用では、正確な値を計算するよりも対数表現(log(n!))やスターリングの近似が好まれます。多くのプログラミング言語や数学ライブラリは、この目的のために対数ガンマ関数の効率的な実装を提供しています。
よくある質問
階乗とは何ですか?
階乗(n!と表記)は、1からnまでのすべての正の整数の積です。例えば、5! = 5 × 4 × 3 × 2 × 1 = 120です。慣例として0! = 1と定義されています。階乗は組合せ論、確率論、数学の多くの分野で基本的な概念です。
0の階乗はなぜ1なのですか?
0! = 1は、空積(因数が0個の積は1に等しい)という数学的概念に基づく慣例です。この慣例により、二項係数 C(n, 0) = n! / (0! × n!) = 1 が正しく「n個からゼロ個を選ぶ方法はちょうど1通り」を表すなど、公式の整合性が保たれます。
この計算ツールで計算できる最大の階乗は?
この計算ツールは0!から170!までをサポートしています。170!は307桁の数で、標準的なJavaScriptのNumber型で表現できる最大の階乗です。計算ツールはBigIntを使用して正確な結果を表示します。170を超えると標準的な浮動小数点表現の範囲を超えます。
二重階乗(n!!)とは何ですか?
二重階乗n!!は、nと同じ偶奇性を持つnまでのすべての正の整数の積です。奇数nの場合:n!! = n × (n-2) × ... × 3 × 1。偶数nの場合:n!! = n × (n-2) × ... × 4 × 2。例えば、7!! = 7 × 5 × 3 × 1 = 105、6!! = 6 × 4 × 2 = 48です。
完全順列(!n)と撹乱順列とは何ですか?
完全順列(!n)は、n個の要素の撹乱順列の数、つまりどの要素も元の位置に残らない順列の数です。例えば、!3 = 2で、{1,2,3}の撹乱順列は{2,3,1}と{3,1,2}の2つです。nが大きくなると、すべての順列のうち約36.8%が撹乱順列になります(1/eに近づきます)。