組合計算器
歡迎使用組合計算器。請輸入元素數量(n)和抽取數量(k 或 r)。如果允許重複,請勾選下方選項,然後按下「計算」按鈕。
組合公式
組合告訴我們,要從 n 個項目中選出 k 個項目時,有多少種選法。這通常稱為「n 中取 k 的組合」,不要和「n 中取 k 的排列」混在一起。兩者最大的差別在於:組合不看選出項目的順序,排列則會看順序。
那麼,從 n 個元素中選出 k 個元素,總共有幾種選法呢?如果是不重複的組合,也就是每選出一個元素後,這個元素就會從可選範圍中移除,不能再被選一次,它的數量通常記為 。許多資料也會使用 或 這類符號,其中 這種寫法相當常見。因此,我們可以寫成:
其中,n! 表示 n 的階乘。另一方面,如果是重複組合,也就是選出的項目會放回可選範圍,之後還可以再次被選取,它的數量通常記為 ,有時也會寫成
不重複的組合和不重複的排列之間,可以用下面這個公式連起來:
簡單來說,就是把排列數除以 k!,用來扣掉順序造成的重複計數。因為在組合裡,選出哪些項目才重要,順序並不重要;但在排列裡,順序不同就會算成不同的排列。如果您想計算的是「順序很重要」的情況,可以前往我們的排列計算器。
組合的例子
100人聚會中會有多少次握手?
想像一下,您剛到一場聚會,現場一共有100位賓客(包括您自己)。當您準備和每個人握手打招呼時,可能會忍不住想:如果每個人都和其他所有人握手一次,總共會有多少次握手呢?
現場一共有 n = 100人。那麼,在這群人當中,可以組成多少組不同的兩人配對呢?換句話說,從100人中取2人的組合有多少種?答案是:
這樣算下來,總共會有4950次握手。這裡用的是不重複的組合,原因也很直白:總不能自己跟自己握手吧!
撲克牌有多少種手牌?
我們先考慮不含鬼牌的情況,也就是一副牌共有52張。現在要從中抽出5張牌,而且是不重複抽取,因為同一張牌不可能被抽到兩次。在這裡,牌的順序並不重要。因此,我們可以使用 n 中取 k 的不重複組合來計算,其中 k = 5,n = 52:
所以,撲克牌中一共有2,598,960種不同的手牌。知道這個總數之後,我們就可以進一步計算各種牌型出現的機率。
拿到鐵支(四條)的機率
要拿到鐵支,首先要選出重複的點數。撲克牌共有13種點數,所以這一步有13種可能。接著,還要再選第5張牌。因為同點數的4張牌已經全部用掉,剩下可以選的牌共有48張。因此,鐵支一共有: 種不同的手牌。所以,隨機拿到鐵支的機率是:
拿到葫蘆的機率
計算拿到葫蘆的機率,會比鐵支稍微複雜一些。首先,我們要選出一對的點數,這有13種可能。接著,再選出三條的點數,這有12種可能,因為三條不能和一對是同一個點數,所以要扣掉1種選擇。接下來,還要把花色的組合算進去。一對可以從4種花色中選出2種,所以有 種組合;三條則是從4種花色中選出3種,所以有 種組合。現在把這些數字乘起來,就可以得到葫蘆手牌的總數:
因此,一共有3744種不同的葫蘆手牌。隨機拿到葫蘆的機率是 ,也就是說,拿到葫蘆的機率大約是拿到鐵支的6倍。
拿到同花的機率
同花指的是5張牌都是同一種花色。我們先選花色,總共有4種可能。接著,再從這個花色的13張牌中選出5張,這有 種選法。因此,不同的同花手牌總共有:
隨機拿到同花的機率是
注意!這個公式也包含了同花順的可能性。同花順是一種特殊的同花,不只5張牌花色相同,點數還必須連續。如果您想計算的是一般的同花,也就是牌面點數沒有連續的同花,就需要從上面算出的機率中扣掉同花順的機率。下面會再說明同花順的計算方式。
拿到順子的機率
順子指的是5張牌的點數連續(每一張牌都比前一張大一個點數)。至於花色是什麼,這裡先不考慮。要計算這樣的手牌有多少種,我們可以先決定最大的一張牌是什麼。最大牌可以是 A、K、Q、J、10、9、8、7、6或5。這裡要注意,A 也可以當作最小的牌,出現在5-4-3-2-A這種順子裡。因此,最大牌的點數共有10種選擇。一旦最大牌決定了,剩下4張牌的點數也就跟著確定。接下來要選的是花色。每張牌都有4種花色可以選,而且5張牌要分別選花色,所以這裡用的是4中取5的重複排列,公式是 45。因此,順子手牌的總數是:
隨機拿到順子的機率是
注意!這個公式也包含了同花順的可能性。同花順是一種特殊的順子,不只點數連續,5張牌的花色也都相同。如果您想計算的是一般的順子,也就是5張牌並非全部同一花色的順子,就需要從上面算出的機率中扣掉同花順的機率。下面會再說明同花順的計算方式。
拿到同花順的機率
同花順是撲克牌中很有價值、也很少見的牌型之一。這種牌型和順子一樣,5張牌的點數必須連續;同時又和同花一樣,5張牌必須是同一種花色。要計算同花順有多少種,我們一樣先決定最大牌。和一般順子相同,最大牌共有10種選擇。當點數順序確定之後,接著只要選花色。花色共有4種,所以這一步有4種可能。因此,最後的公式是:
一共只有40種同花順手牌,所以隨機拿到同花順的機率是
注意!這個公式也包含了皇家同花順的可能性。皇家同花順會在下面說明。如果您想計算的是不包含皇家同花順的一般同花順,就需要從上面算出的機率中扣掉皇家同花順的機率。
拿到皇家同花順的機率
拿到皇家同花順的機率,比拿到同花順還要更低。原因很簡單:皇家同花順可以看成是最大牌為 A 的同花順。換句話說,皇家同花順的點數一定固定是 A、K、Q、J 和10。唯一會變的,只有花色。因為撲克牌只有4種花色,所以皇家同花順一共也只有4種手牌。隨機拿到皇家同花順的機率是 。這個機率是同花順機率的十分之一。
拿到三條的機率
要拿到三條,首先要選出三張相同點數的牌。撲克牌共有13種點數,所以這一步有13種可能。接著,要從剩下的12種點數中選出另外兩張牌的點數。這裡要特別注意,這兩張牌不能組成一對;否則拿到的就會是葫蘆,而不是三條。因此,我們要用12中取2的不重複組合來計算:。最後,還要選花色。三條的花色要從4種花色中選出3種,所以是 。另外兩張牌的點數不同,因此它們的花色可以各自從4種花色中選擇,也就是4中取2的重複排列,結果是 42。把這些部分全部乘起來,公式就會變成:
因此,拿到三條的機率是
拿到兩對的機率
拿到兩對一共有多少種可能呢?我們可以一步一步來看。首先,要選出兩對的點數,也就是從13種點數中選出2種:。接著,要選第5張牌的點數。因為這張牌不能和前面兩對的點數相同,所以剩下11種點數可以選:。第三步,要選每一對的花色。同一對裡的兩張牌,花色必須不同。因此,較小點數的那一對,有 種花色選法;較大點數的那一對,也有 種花色選法。最後,還要選第5張牌的花色,這有4種可能。把這些部分全部乘起來,就會得到:
因此,拿到兩對的機率是
拿到一對的機率
最後,我們來看一對的機率。計算方式如下:1)先選出一對的點數:2)再選出其餘3張牌的點數:3)選出一對中兩張牌的花色:4)最後,選出其餘3張牌的花色:43。這裡可能會有一個疑問:為什麼選3張不同牌的點數時,要用組合 ,但選它們的花色時,卻用 43 這種排列的公式呢?原因在於,選點數時,順序並不重要。比如說,選到三種點數,不管它們在手牌裡怎麼排,還是同一副手牌,所以要用組合。可是,這3張牌的點數彼此不同,本身就可以依照大小排出一個自然順序:最大、中間、最小。選花色時,我們就可以依照這個順序來看。先選最大點數那張牌的花色,再選中間點數那張牌的花色,最後選最小點數那張牌的花色。每一次都有4種花色可以選,所以一共有 種可能。
因此,一對手牌的總數是
拿到一對的機率則是 。這個結果也可以自己做個小實驗來驗證。洗好一副牌,抽出5張,看看有沒有拿到一對,然後把結果記下來。多試幾次之後,您會發現,拿到一對的次數大約會略少於一半。
中威力彩頭獎的機率有多高?
許多國家都有樂透,玩法大多是從一大池號碼球中抽出幾顆球。只要選中的號碼和開出的號碼相同,就有機會中獎,而且頭獎獎金通常都相當可觀。以台灣常見的威力彩來說,選號分成兩區:第一區要從1到38中選出6個不重複的號碼,第二區則要從1到8中另外選出1個號碼。要中頭獎,第一區6個號碼和第二區號碼都必須完全對中。因此,所有可能的選號組合數可以用下面的公式表示:
所以,威力彩一共有22,085,448種選號方式。換句話說,如果想保證自己一定中頭獎,就得買22,085,448張彩券。如果只買一張彩券,中頭獎的機率就是22,085,448分之1,也就是大約0.00000452%。
同樂會零食有幾種帶法?
在這個例子中,想像一下,班上要辦同樂會,老師請大家準備一些零食一起分享。現在有三種零食可以選:乖乖、蚵仔煎洋芋片和科學麵。您打算一共買5包,那麼總共有多少種不同的選法呢?
我們先來看條件。第一,可以選的零食種類有3種,所以 n = 3。第二,這些零食怎麼排列並不重要;意思是,先買乖乖再買科學麵,和先買科學麵再買乖乖,最後其實是同一種選法。第三,每一種零食都可以買不只一包。因此,這裡要使用的是3中取5的重複組合。公式如下:
所以,同樂會零食一共有21種選法。為了確認我們算得沒錯,可以把所有可能的組合列出來。為了讓表格簡短一點,我們把三種零食分別記為 A、B 和 C:
組合公式怎麼來的?
n 中取 k 的不重複組合
n 中取 k 的不重複組合公式,有時也會稱為「n 取 k」或「n 取 r」公式,可以寫成:
要確認這個公式為什麼成立,我們可以先想像一個選數字的過程:從1到 n 之間選出 k 個數字。一開始,我們先把選出的數字排成一個長度為 k 的序列。序列的第一個位置,可以放1到 n 之間的任何一個數字,所以有 n 種選擇。選好第一個數字之後,這個數字就從可選範圍中移除;因此,第二個位置就只剩下 n − 1 種選擇。接著,第二個數字也會被移除,到了第三個位置,就只剩下 n − 2 個數字可以選。這個過程一直繼續下去,直到長度為 k 的序列被填滿為止。要算出這類序列的總數,也就是 n 中取 k 的不重複排列數,我們要把每一步的選擇數相乘:
不過,這個乘法其實就是 n! 裡面最大的 k 個因數相乘。因此,我們也可以把它改寫成:
這裡分母中的階乘,會把分子中最小的 n − k 個因數約掉,剩下的部分就會和前面的乘法式相同。
但這還不是最終結果。到目前為止,我們算出來的是排列數,不是組合數。在排列裡,元素的順序很重要;剛才建立序列時,我們也確實有在意順序,先選第一個位置,再選第二個位置、第三個位置,依此類推。可是現在,我們想算的是組合,也就是只要選出的數字相同,不管順序如何,都要視為同一個組合。那麼,k 個不同的數字可以排出多少種不同的序列呢?答案很簡單,就是 k! 種。換句話說,同一組 k! 個數字,會對應到 k! 種排列。因此,要從排列數得到組合數,就需要把排列數除以 k!:
n 中取 k 的可重複組合
那麼,n 中取 k 的可重複組合公式是怎麼來的呢?我們可以先換一個方式想。n 個元素中的每一個,都可能被選0次、1次,一直到 k 次。因此,可以想像有 n 個盒子,從1編號到 n。每個盒子裡可以放0到 k 顆球,而所有盒子裡的球加起來,總數剛好是 k。在這個想法裡,盒子代表元素;某一個盒子裡有幾顆球,就表示對應的那個元素被選了幾次。
接下來的問題是:我們要怎麼用一串數字,描述每個盒子裡有幾顆球呢?可以這樣做。我們建立一個長度為 n − 1 的數列。這個數列中的第 i 個數字,表示從第1個盒子到第 i 個盒子為止,盒子數量和球數量加起來的總和。例如,數列中的第一個數字,是1加上第1個盒子裡的球數,所以它可能是1到 k + 1 之間的任何一個數。第二個數字,是2加上前兩個盒子裡的球數總和,所以它可能落在2到 k + 2 之間;但它一定要比第一個數字大。第三個數字,是3加上前三個盒子裡的球數總和,所以它可能落在3到 k + 3 之間,而且也一定要比第二個數字大。後面的數字也依此類推。這樣看下來,最後一個數字,也就是第 n − 1 個數字,會等於 n − 1 加上除了最後一個盒子以外,其他所有盒子裡的球數總和。它最小可以是 n − 1 ,這代表所有球都放在最後一個盒子裡;最大可以是 n − 1 + k,這代表最後一個盒子裡沒有球。
現在,我們再換個角度來看。假設有一組數字,從1到 n − 1 + k。從這些數字中,我們不重複地選出 n − 1 個數字,然後把它們由小到大排好。只要這樣做,我們就能知道每個盒子裡應該放幾顆球。換句話說,從 n − 1 + k 這一大組數字中,選出 n − 1 個數字的每一種方法,都會剛好對應到一種把 k 顆球分到 n 個盒子裡的方法。那麼,從 n − 1 + k 個數字中,不重複地選出 n − 1 個數字,有幾種選法呢?答案就是:
這已經很接近我們要的公式了。最後只要注意,分母中的兩個階乘可以交換順序,也就是:
最後就得到:
巴斯卡三角形與二項式係數
二項式是由兩個單項式相加而成的代數式,例如 。當我們把 提升到某個非負整數次方時,展開式中出現在 x 和 y 前面的那些數字,就稱為二項式係數。舉例來說: ;在這幾個例子中,二項式係數依序是:1、1-1、1-2-1,以及1-3-3-1。有趣的是,二項式係數和 n 中取 k 的組合有密切關係。當我們把 展開時, 前面的係數就是 。例如,在 中, 前面的係數是 。這個關係一般可以用下面的公式表示:
此外,二項式係數還會形成一個很有趣的圖形,也就是巴斯卡三角形:
| n | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1 | ||||||||||
| 1 | 1 | 1 | |||||||||
| 2 | 1 | 2 | 1 | ||||||||
| 3 | 1 | 3 | 3 | 1 | |||||||
| 4 | 1 | 4 | 6 | 4 | 1 | ||||||
| 5 | 1 | 5 | 10 | 10 | 5 | 1 | |||||
| 6 | ⋯ | ||||||||||
巴斯卡三角形有一個很有趣的規律:下一列的數字,可以由上一列相鄰的兩個數字相加得到。例如,n = 4 這一列中的6,就是由上一列的3 + 3得來的。同樣地,n = 5 這一列中的10,則是由上一列的4 + 6得來的。這個規律可以用下面的等式表示:
二項式等式與恆等式
下面列出幾個和二項式係數有關、最常見的恆等式:
在 Python 中計算 n 取 k
在 Python 程式語言中,如果要計算 n 中取 k 的不重複組合數,可以使用 math 模組中的 comb 函式:
from math import comb
def nCk(n, k):
return comb(n, k)
如果要計算 n 中取 k 的重複組合數,可以利用重複組合和不重複組合之間的關係式來求得:
from math import comb
def nEk(n, k):
return comb(n + k - 1, k)
如果想列出所有 n 中取 k 的不重複組合,Python 也有內建函式可以做到:
from itertools, import combinations
def list_combs(n, k):
for c in combinations(range(1, n+1), k):
print(c)
而如果想列出所有 n 中取 k 的重複組合,則可以使用:
from itertools import combinations_with_replacement
def list_combs_wr(n, k):
for c in combinations_with_replacement(range(1, n+1), k):
print(c)
如果想自己寫一個函式,計算 n 中取 k 的不重複組合數,可以參考下面這個例子:
from math import factorial
def nCk(n, k):
return int(factorial(n) / (factorial(k) * factorial(n-k)))
至於計算 n 中取 k 的重複組合數的函式,則可以這樣寫:
from math import factorial
def nEk(n, k):
return int(factorial(n + k - 1) / (factorial(k) * factorial(n-1)))
如何使用組合計算器
組合計算器可以用來計算 n 中取 k 的組合,包含不重複和可重複兩種情況。要進行計算,請先在標有 n 的欄位中輸入可選元素的數量。接著,在標有 k 或 r 的欄位中輸入抽取數量。如果要計算的是重複組合,請勾選下方的核取方塊。最後按下「計算」按鈕,結果就會顯示在下方。
這個計算器特別適合處理很大的數字。像是 n = 1000000、k = 1000 這類輸入,計算起來也不成問題。遇到大數時,計算器會用兩種形式顯示結果:第一行會顯示科學記號的近似值,第二行則會顯示完整的精確答案。
計算器沒有預先設定的上限,不論 n 和 k 有多大,都會嘗試進行計算。至於能不能順利算出結果,則要看您的系統設定而定。以桌上型電腦上的新版 Chrome 瀏覽器來說,像 n = 8000000000、k = 10000000 這樣的輸入也可以輕鬆處理。舉個誇張一點的例子:如果小行星撞擊地球後,要從地球人口中選出10,000,000人登上巨大太空船,這個計算器也可以算出有多少種選法。不過,其他系統設定,尤其是行動裝置,處理這麼大的數字時可能就會比較吃力。
這個計算器還有幾個其他功能。您可以:
- 選擇結果要用哪一種進位制顯示。可以使用2到36之間的任一整數。預設進位制是10,也就是結果預設會以十進制顯示。如果選擇其他進位制,它只會用來顯示結果;輸入值一律會以十進制讀取。
- 點擊「清除」按鈕,清空 n 和 k 欄位,然後重新輸入想要的數值。
- 將結果複製到剪貼簿。若要使用這個功能,以及下面幾個功能,請按「結果」欄位上方對應的按鈕。
- 將結果下載並儲存為文字檔到您的裝置。
- 列印結果。
- 將結果連結複製到剪貼簿。
- 清除結果。
引用或內嵌本內容
您可以免費使用本網站內容,也可以用於商業用途;只要引用本網站作為資料來源即可。如果要在學術文章中引用,可以使用以下格式:
如果要在網路上引用本網站,可以直接連結到本頁的主要網址(https://
您也可以使用 iframe 元素,將本頁內嵌到自己的網站中。如果只想顯示計算器本身,而不顯示選單、文章等其他內容,可以在 src 屬性中使用以下網址:https://
也請您在網站上註明本頁來源,並以可點擊的連結引用本頁。如果您已經將我們的應用程式內嵌到網站中,也歡迎寄信到 contact@simiade.com 告訴我們。這樣一來,如果日後我們對應用程式做出調整,而網站管理員需要更新顯示方式時,我們也可以通知您。
參考資料
Charalambides, Charalambos A., Enumerative Combinatorics, CRC Press, 2002.
聯絡我們
如果您有任何問題、意見或建議,歡迎在這裡留下回饋:
也可以郵寄至:
Adam Narkiewicz
Plac Bankowy 2
00-095 Warszawa
波蘭
+48 728235409
contact@simiade.com
https://simiade.com/zh-Hant/
