階乗計算機
範囲:0〜170(JavaScript の制限)
📊 結果
📝 ステップごとの計算:
🎨 可視化:乗算ツリー
🎯 順列&組み合わせ
🔄 順列 P(n,r)
💡 順番が重要:ABC ≠ BAC
🎲 組み合わせ C(n,r)
💡 順番は関係ない:ABC = BAC
📋 階乗の早見表
| n | n! | 桁数 | 現実世界の例 |
|---|
💡 面白い豆知識
🃏 カードのシャッフル
52! ≈ 8.07 × 10⁶⁷ 通りの並び替え。もし地球上の全員がビッグバン以来、1秒に1回シャッフルしても、ほとんど到達できません!
🎭 劇場の座席
10人は 10! = 3,628,800 通りの座り方があります。運営は指数的に難しくなります!
📊 0! = 1
定義により 0! = 1。0個を並べる方法は「何もしない」1通りだけです。これにより数式が一貫して成り立ちます。
🚀 増加の速さ
階乗は指数関数よりも速く増加します!2ⁿ が倍々でも、n! は増えていく数で掛け算。100! は 158 桁です!
階乗計算機 - 手順付きで n! を計算
🔢 0〜170 の任意の数について階乗(n!)を計算できます。手順の表示、順列・組み合わせ、現実世界での応用も確認できます。
階乗とは?
非負整数 n の階乗(n!)は、n 以下の正の整数をすべて掛け合わせた積です。 n 個の異なる物体を並べ替える方法の数を表します。
階乗の公式
n! = n × (n-1) × (n-2) × ... × 3 × 2 × 1
- 0! = 1(定義)
- 1! = 1
- n! = n × (n-1)!(再帰定義)
階乗の例
- 5! = 5 × 4 × 3 × 2 × 1 = 120
- 10! = 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 3,628,800
- 0! = 1(特別なケース)
- 20! = 2,432,902,008,176,640,000
なぜ 0! = 1 なの?
0個の物体を並べる方法は「何もしない」1通り(空の並び)だけです。この定義により、 特に組合せ論などの数式が矛盾なく成り立ちます。再帰式 n! = n × (n-1)! からも、 1! = 1 × 0! なので 0! = 1 が必要になります。
順列
P(n,r) = n!/(n-r)!
n 個の異なる物体から r 個を取り出して並べる方法の数(順番が重要)。
- 例: P(5,3) = 5!/(5-3)! = 120/2 = 60
- 用途: レースの表彰台(1位・2位・3位)
組み合わせ
C(n,r) = n!/(r!(n-r)!)
n 個の異なる物体から r 個を選ぶ方法の数(順番は関係ない)。
- 例: C(5,3) = 5!/(3!×2!) = 120/(6×2) = 10
- 用途: 宝くじ、委員会の選出
n! の末尾の0の数
末尾の0は 10 = 2 × 5 の因数で生まれます。2 は 5 より多いので、5 の個数だけ数えればOK:
0の数 = ⌊n/5⌋ + ⌊n/25⌋ + ⌊n/125⌋ + ...
- 10! は末尾の0が 2 個
- 25! は末尾の0が 6 個
- 100! は末尾の0が 24 個
現実世界での応用
- 暗号: 可能な鍵の数
- スケジューリング: 予定・タスク・イベントの並べ方
- 遺伝学: DNA/タンパク質の配列の可能性
- 確率: ゲームや宝くじの確率計算
- 計算機科学: アルゴリズムの計算量解析
- 製造: 生産ラインの配置
- 物流: ルート最適化
有名な階乗の値
- 52! ≈ 8.07 × 10⁶⁷(カードのシャッフル)
- 70! ≈ 1.2 × 10¹⁰⁰(宇宙の原子数 ≈ 10⁸⁰ を超える)
- 100! ≈ 9.3 × 10¹⁵⁷(158桁!)
- 170! ≈ 7.3 × 10³⁰⁶(JavaScript最大)
スターリングの近似
大きな n では厳密計算が大変なので、スターリングの近似を使えます:
n! ≈ √(2πn) × (n/e)ⁿ
n が大きいほど精度が上がります。n = 10 では誤差は 1% 未満です。
階乗の増加の比較
階乗は指数関数や多項式よりはるかに速く増加します:
- 多項式: n² = 100(n=10)
- 指数: 2ⁿ = 1,024(n=10)
- 階乗: n! = 3,628,800(n=10)
二重階乗
二重階乗(n!!)は 1つおきに掛け算します:
- n!! = n × (n-2) × (n-4) × ... × 2 または 1
- 7!! = 7 × 5 × 3 × 1 = 105
- 8!! = 8 × 6 × 4 × 2 = 384
サブファクトリアル(完全錯置)
サブファクトリアル !n は、どの要素も元の位置に戻らない並べ替えの数です:
!n = n! × (1/0! - 1/1! + 1/2! - 1/3! + ... + (-1)ⁿ/n!)
例: !3 = 2(ABC のうち元の位置に戻らない並び:BCA, CAB)
プログラム実装
反復(ループ):
function factorial(n) {
let result = 1;
for (let i = 2; i <= n; i++) {
result *= i;
}
return result;
}
再帰:
function factorial(n) {
if (n === 0 || n === 1) return 1;
return n * factorial(n - 1);
}
💡 豆知識: 順列・組み合わせを計算する際は、オーバーフローを避けるために 先に共通因子を約分すると良いです。C(100,2) = 100!/(2!×98!) は、巨大な階乗を計算せず (100×99)/2 = 4,950 として求められます!
コメント (0)
感想を共有してください。礼儀正しく、話題に沿ってお願いします。
コメントするにはログイン