阶乘计算器

范围:0 到 170(JavaScript 限制)

📊 结果

5!
=
120
📏 位数
3
🔟 末尾零的个数
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⁶⁷ 种可能的排列。即便地球上每个人从宇宙大爆炸起每秒洗一副牌,我们也几乎触及不到这个数量级!

🎭 剧院座位

10 个人可以用 10! = 3,628,800 种不同方式就座。管理剧院座位安排会呈指数级复杂!

📊 0! = 1

按定义,0! = 1。排列 0 个对象只有一种方式:什么都不做!这让数学公式保持一致。

🚀 增长速度

阶乘增长速度比指数还快!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 个对象只有一种方式:空排列。这个定义保证数学公式(尤其是组合数学中的公式)能正确工作。 也与递归公式一致: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! 的末尾零

末尾零由因子 10 = 2 × 5 产生。由于 2 的因子总是比 5 多,我们只需统计 5 的因子数量:

零的个数 = ⌊n/5⌋ + ⌊n/25⌋ + ⌊n/125⌋ + ...

  • 10! 有 2 个末尾零
  • 25! 有 6 个末尾零
  • 100! 有 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!!)是隔一个数相乘:

  • 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)

分享你的想法——请保持礼貌并围绕主题。

暂无评论。留下评论,分享你的观点!

要发表评论,请先登录。

登录后发表评论