🧮 順列・組合せ・階乗

n と r から順列 nPr、組合せ nCr、階乗 n! を計算します。

入力

0以上の整数

0 ≤ r ≤ n の整数

組合せ nCr

—

※ 順列 nPr = n! ÷ (n−r)!、組合せ nCr = n! ÷ {r! × (n−r)!}、階乗 n! = n×(n−1)×…×1(0! = 1)。

解説

順列(じゅんれつ)と組合せ(くみあわせ)は、「n個のものから r個を取り出す場合の数」を数える計算です。違いは順番を区別するかどうか。順番まで区別して並べるのが順列(nPr)、順番を区別せず選ぶだけなのが組合せ(nCr)です。このツールは n と r を入れるだけで、順列 nPr・組合せ nCr・階乗 n! の3つをまとめて計算します。くじやチーム分け、座席の並べ方、当選確率の分母づくりなどに使えます。

順列(nPr)は、n個から r個を選んで「順番をつけて」並べる場合の数で、nPr = n! ÷ (n−r)! で求めます。実際には n から1つずつ小さくして r個分だけ掛ければ十分です。たとえば5人から3人を選んで1列に並べる方法は 5P3 = 5×4×3 = 60 通り。1番目に5通り、2番目に残り4通り、3番目に残り3通り、と掛け合わせるイメージです。

組合せ(nCr)は、n個から r個を「順番を区別せず」選ぶ場合の数で、nCr = n! ÷ {r! ×(n−r)!} で求めます。順列のうち、同じ顔ぶれの並べ替え(r!通り)を1つにまとめたものが組合せなので、nCr = nPr ÷ r! の関係が成り立ちます。たとえば5人から3人のグループを作る方法は 5C3 = 5P3 ÷ 3! = 60 ÷ 6 = 10 通り。なお nCr = nC(n−r) という対称性があり、5C3 と 5C2 はどちらも10です。

階乗(n!)は 1 から n までのすべての整数を掛けた値で、n! = n×(n−1)×…×2×1 です。たとえば 5! = 5×4×3×2×1 = 120。n人を1列に並べる方法の総数がちょうど n! になります。0! は「何も並べない並べ方が1通り」という約束のもと 1 と定め、これにより順列・組合せの公式が破綻なく成り立ちます。

計算はすべてブラウザ内のJavaScript BigIntで行うため、桁の大きな結果でも桁あふれせず正確に求められ、入力値が外部に送信されることもありません。極端に大きな n は処理に時間がかかるため、上限を n ≤ 1000 としています。また r は 0 以上 n 以下である必要があり、範囲外を入れると注意が表示されます。

よくある質問

順列と組合せの違いは何ですか?

順列は「順番を区別する」並べ方の数、組合せは「順番を区別しない」選び方の数です。同じ n, r でも順列の方が多く(nPr ≥ nCr)、nPr = nCr × r! の関係があります。例: 5人から3人なら、並べる順列は60通り、選ぶだけの組合せは10通りです。

nPr(順列)の計算方法は?

n! ÷ (n−r)! ですが、実際は n から1ずつ小さくして r個分だけ掛ければ求まります。例: 5P3 = 5×4×3 = 60。先頭から「残りの選択肢の数」を順に掛けていくと考えると分かりやすいです。

nCr(組合せ)の計算方法は?

nCr = n! ÷ {r! ×(n−r)!} で、順列を r! で割ったもの(nCr = nPr ÷ r!)でもあります。例: 5C3 = 60 ÷ 6 = 10。nCr = nC(n−r) なので、r が大きいときは n−r で計算すると速くなります。

0! はなぜ1なのですか?

「何も選ばない・並べない方法が1通り」と定めると、組合せや順列の公式が破綻なく成り立つためです。このツールでも 0! = 1 として計算します。

n と r が同じときはどうなりますか?

nPn = n!(全部を並べる総数)、nCn = 1(全部を選ぶ選び方は1通り)になります。また nC0 = 1、nP0 = 1 です。

とても大きな n でも計算できますか?

JavaScriptのBigIntで計算するため大きな数でも正確ですが、極端に大きな n は処理に時間がかかるため上限(n ≤ 1000)を設けています。