階乗計算機

範囲:0〜170(JavaScript の制限)

📊 結果

5!
=
120
📏 桁数
3
🔟 末尾の0の数
1
🔢 指数表記
1.2e+2

📝 ステップごとの計算:

🎨 可視化:乗算ツリー

🎯 順列&組み合わせ

🔄 順列 P(n,r)

式:P(n,r) = n!/(n-r)!
60
5!/(5-3)! = 60

💡 順番が重要:ABC ≠ BAC

🎲 組み合わせ C(n,r)

式:C(n,r) = n!/(r!(n-r)!)
10
5!/(3!×2!) = 10

💡 順番は関係ない: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)

感想を共有してください。礼儀正しく、話題に沿ってお願いします。

まだコメントはありません。コメントを残して、あなたの意見を共有してください!

コメントを残すにはログインしてください。

コメントするにはログイン