階乘計算器(n!・排列nPr・組合nCr)

精確計算非負整數n的階乘n!。同時支援排列(nPr)與組合(nCr),使用BigInt實現無位數限制的精確整數計算。附帶0〜20的階乘速查表。

0〜20 的階乘速查表

彙總了0!到20!數值的一覽表。20!已經是19位數。

n n!
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5,040
8 40,320
9 362,880
10 3,628,800
11 39,916,800
12 479,001,600
13 6,227,020,800
14 87,178,291,200
15 1,307,674,368,000
16 20,922,789,888,000
17 355,687,428,096,000
18 6,402,373,705,728,000
19 121,645,100,408,832,000
20 2,432,902,008,176,640,000

階乘、排列與組合

階乘 n! 是把1到n的所有整數相乘所得的值,表示把n個事物排成一列的排法總數。5! = 120、10! = 3,628,800,n只要稍微增大,數值便會爆炸式增長。到20!已超過18位數,普通的浮點數已無法精確表示。

本工具使用 BigInt 計算,位數不設上限,給出嚴格的整數值。除階乘外,還支援排列 nPr(從n個中取r個並加以排列的情形數)與組合 nCr(從n個中取r個的情形數,不計順序)。兩者的關係為 nPr = n! ÷ (n−r)!、nCr = n! ÷ (r! × (n−r)!),唯一的差別就在於是否區分排列的順序。並附有0~20的階乘速查表。

計算的步驟

  1. 選擇計算的種類 從階乘(n!)、排列(nPr)、組合(nCr)三個分頁中選擇。
  2. 輸入 n 0以上、10,000以下的整數。上限是出於計算量的考量。
  3. 輸入 r(排列與組合時) 請輸入0以上、不超過n的整數。
  4. 查看結果 即使位數很多也會完整顯示為嚴格的整數,不作省略。

用好本工具的小技巧

  • 階乘(n!)是1到n所有整數的連乘積。例如:5! = 5×4×3×2×1 = 120。特別規定 0! = 1。
  • 排列(nPr)表示從n個不同元素中選出r個並「排序」的方法數。由於要區分順序,其值總是不小於對應的組合數。例如:5P2 = 5×4 = 20。
  • 組合(nCr)表示從n個不同元素中「選出」r個(不區分順序)的方法數。例如:5C2 = 10(將5P2 = 20除以2個元素的排列方式數2!=2得到)。
  • 階乘增長極其迅速,20!已達19位數,100!更是高達158位。本工具採用BigInt,即使n很大也能精確計算,無誤差。
  • 若n過大(超過10,000),出於計算成本考慮會提示錯誤,這是為防止瀏覽器卡死而設定的實用上限。

這些情境會用到

求解機率問題

可用於核對抽籤、牌型組合等求情形數的題目。

計數排法總數

座位安排、賽程配對等實務上的計數也用得上。

求二項式係數

nCr 正是二項式定理的係數,可直接查看巴斯卡三角形中的數值。

核對程式的計算

把自寫的階乘函式在較大 n 下的結果與嚴格值比對,確認有無溢位。

階乘相關的術語

階乘(n!)
從1到n的整數之積。規定 0! = 1(依據空積為1的約定)。
排列(nPr)
從n個中取r個並加以排列的情形數,由 n! ÷ (n−r)! 求得。
組合(nCr)
從n個中取出r個的情形數,不區分順序,由 n! ÷ (r! × (n−r)!) 求得。
二項式係數
展開 (a+b)^n 時各項的係數,與 nCr 相同。
BigInt
JavaScript 中不受位數限制地處理整數的型別。普通數值型別超過2^53後便會失去精確性。
斯特林近似
在 n 較大時近似 n! 的公式,用於不需要嚴格值的場合。

常見問題

0! = 1 是數學上的一種約定。如果將其理解為「排列空集合(什麼都不選)的方法只有1種(即不做任何排列這一種方式)」便很自然,同時這也是使階乘性質 n! = n × (n-1)! 在n=1時依然成立所必需的定義。

排列(nPr)是「選出並排序」的方法數,區分順序(AB和BA不同)。組合(nCr)只是「選出」,不區分順序(AB和BA相同)。因此始終有 nCr ≤ nPr,且滿足 nCr = nPr ÷ r! 的關係。

支援到10,000以內的整數。10,000!是超過35,000位的巨大數字,超出這個範圍可能會因顯示和計算成本導致瀏覽器變卡,因此設定了這一實用上限。

除了排列、組合的計算外,階乘在機率論(骰子、撲克牌的組合)、統計學(二項分佈、泊松分佈的計算公式)、泰勒展開(如eˣ等級數展開中會出現階乘)等數學的多個領域中都發揮著基礎性作用。
工具君

閒話 ― 階乘符號「!」為什麼是感嘆號

表示階乘的符號「!」據說是1808年法國數學家克里斯蒂安·克蘭普(Christian Kramp)在其著作中引入的。在此之前,不同數學家各自使用五花八門的表示法,並無統一標準。關於克蘭普選擇這一符號的原因說法不一,但流傳較廣的說法是,它表達了對階乘數值急劇增長的「驚歎」之情。

階乘的急速增長也體現在斯特林近似公式(n! ≈ √(2πn)(n/e)ⁿ)中,該公式被廣泛用於統計學、機率論、組合數學等領域的近似計算。事實上,對於精確計算n!都十分困難的巨大n值,這一近似公式在實際應用中發揮著重要作用。

排列、組合的思想是解決許多日常機率問題的基礎,例如彩票中獎機率的計算,以及一副撲克牌的洗牌方式數量(52張撲克牌的排列方式共有52!種,約8×10⁶⁷種)。組合數nCr也出現在「帕斯卡三角形」的每一行數字中,並與二項式定理((a+b)ⁿ的展開)密切相關。