求めたい数え方を選び、種類の数 n と選ぶ個数 r(文字列の並べ替えのときは文字列)を入力してください。下の数式は入力欄と連動していて、数字の部分を直接書き換えても計算できます。
このページでできること
- \(n\) 種類から同じものを何回でも選んでよいとして \(r\) 個を並べる「重複順列 \({}_{n}\Pi_{r} = n^{r}\)」を計算できます(例:0〜9の10種類の数字で作る4桁の暗証番号)
- 同じものを何回でも選んでよいとして \(r\) 個を選ぶ「重複組合せ \({}_{n}\mathrm{H}_{r} = {}_{n+r-1}\mathrm{C}_{r}\)」を計算できます(例:3種類のジュースから5本買う)
- 「TOMATO」のように同じ文字が混ざった文字列の並べ替えの数(同じものを含む順列)も、文字列を入れるだけで計算できます(30文字まで)
- \(n^{r}\)・\({}_{n}\mathrm{H}_{r}\)・\({}_{n}\mathrm{P}_{r}\)・\({}_{n}\mathrm{C}_{r}\) のどれを使うのか迷ったときのために、「並べる? 選ぶだけ?」「同じものを何回選んでよい?」で決まる判断の図を載せています
- 答えが何十桁になっても丸めずに全桁表示し、桁数が多いときは \(1.2345 \times 10^{18}\) の形の概数も添えます
- ○と仕切り棒を使った重複組合せの図解・Excel/Googleスプレッドシート/Python用のコピペ数式・計算ドリル(演習問題)もこのページにまとまっています
この計算は何の役に立つ?
0〜9の10種類の数字で4桁の暗証番号を作ると、同じ数字を何回使ってもよいので \(10^{4} = 10{,}000\) 通りです。桁を1つ増やすだけで10倍になり、6桁なら100万通りになります。
英大文字・小文字・数字の62種類が使えるパスワードなら、8文字で \(62^{8} = 218{,}340{,}105{,}584{,}896\) 通り(約218兆通り)。「文字の種類を増やす」「長くする」がどれだけ効くのかを比べられるのが、この重複順列の式です。
コンピュータは 0 と 1 の2種類だけで情報を表します。8個ならべた1バイトで表せるパターンは \(2^{8} = 256\) 通りで、これが「1バイトで256段階」と言われる理由です。
写真の色を赤・緑・青それぞれ8ビットで表すフルカラーは \(2^{24} = 16{,}777{,}216\) 通り、およそ1677万色になります。画面の色数・音の量子化ビット数・IPアドレスの個数など、デジタル機器の「表せる数」はどれも重複順列の計算で決まっています。
DNAは A・T・G・C の4種類の塩基でできていて、3個ならんだ組(コドン)が体を作るアミノ酸1個に対応します。同じ塩基が続いてもよいので、コドンの種類は \(4^{3} = 64\) 通りです。
体で使われるアミノ酸は20種類あるので、2個ずつでは \(4^{2} = 16\) 通りしかなく足りません。「3個ずつなら足りる」という生命のしくみが、この重複順列の計算で確かめられます。
5種類のドーナツから、同じ種類を何個選んでもよいとして10個入りの箱を作る方法は、順番を問わない重複組合せで \({}_{5}\mathrm{H}_{10} = {}_{14}\mathrm{C}_{10} = 1{,}001\) 通りあります。
「どの商品を何個」という発注や在庫の内訳を数えるのも同じ形の計算で、品ぞろえを1種類増やしたときに管理すべきパターンがどれだけ増えるかを、感覚ではなく数字で見積もれます。
碁盤の目のような街路で、右へ3区画・上へ2区画進む最短経路は「右・右・右・上・上」という5文字の並べ替えの数と同じなので、\(\dfrac{5!}{3!\,2!} = 10\) 通りです。同じものを含む順列がそのまま使えます。
配送ルートの候補数や、基板の配線パターンの数を見積もるときの土台になる計算で、区画が増えるほど候補が爆発的に増えることも数字で確かめられます。
式と図
用語・記号の解説
記号
| \(n\) | エヌ | 選ぶもとになる種類の数。(例:3種類のジュースから選ぶなら \(n = 3\)、0〜9の数字を使うなら \(n = 10\))。個数を表す文字には number(数)の頭文字 \(n\) がよく使われます。ただし同じものを含む順列 \(\dfrac{n!}{p!\,q!\cdots}\) の \(n\) だけは意味が変わり、並べるもの全部の個数を指します(「TOMATO」なら文字の種類は4つですが \(n = 6\))。 |
| \(r\) | アール | 重複を許して選ぶ(並べる)個数。(例:ジュースを5本買うなら \(r = 5\)、4桁の暗証番号なら \(r = 4\))。順列・組合せの記号 \({}_{n}\mathrm{P}_{r}\)・\({}_{n}\mathrm{C}_{r}\) と同じ位置に置く文字です。 |
| \(n!\) | エヌの階乗 | \(n\) から \(1\) までの整数をすべて掛け合わせた数。\(n\) 個すべてを1列に並べる並べ方の総数を表します。ただし \(0! = 1\) と約束します。(例:\(4! = 4 \times 3 \times 2 \times 1 = 24\)) |
| \({}_{n}\Pi_{r}\) | エヌ・パイ・アール | 重複順列。\(n\) 種類から重複を許して \(r\) 個選び、順番も区別して並べる方法の総数で、値は \(n^{r}\) です。\(\Pi\) は掛け算(積)を表すギリシャ文字パイの大文字で、英語 Product(積)の頭文字 P にあたります。この記号を載せずに \(n^{r}\) とだけ教える教科書もあるので、答案では学校で習った書き方に合わせてください。 |
| \({}_{n}\mathrm{H}_{r}\) | エヌ・エイチ・アール | 重複組合せ。\(n\) 種類から重複を許して \(r\) 個選ぶ、順番を区別しない選び方の総数で、値は \({}_{n+r-1}\mathrm{C}_{r}\) です。\(\mathrm{H}\) は「同じ次数の項をすべて集めたもの」を意味する homogeneous(同次)の頭文字に由来するといわれます。高校では発展的な内容として扱われることが多く、この記号を載せていない教科書もあります。 |
| \({}_{n}\mathrm{P}_{r}\) | エヌ・ピー・アール | 順列。\(n\) 個から \(r\) 個選んで順番に並べる方法の総数で、一度選んだものは二度と選べません。P は順列を意味する英語 permutation の頭文字です。 |
| \({}_{n}\mathrm{C}_{r}\) | エヌ・シー・アール | 組合せ。\(n\) 個から \(r\) 個選ぶ方法の総数で、一度選んだものは二度と選べず、順番も区別しません。C は組合せを意味する英語 combination の頭文字です。 |
| \(N\) | エヌ(大文字) | このページでは、同じものを含む並べ方の総数を表す文字として使っています。number(数)の頭文字を大文字にしたもので、「求めたい総数」を表すときによく使われます。 |
| \(p,\ q\) | ピー・キュー | 同じものを含む順列で、同じものが何個ずつあるかを表す文字。(例:「TOMATO」なら T が \(p = 2\) 個、O が \(q = 2\) 個、M が1個、A が1個)。種類が3つ以上あるときは \(p,\ q,\ r,\ \dots\) と続けます(この \(r\) は「選ぶ個数 \(r\)」とは別物です)。全部足すと必ず \(p + q + r + \cdots = n\)(並べるもの全部の個数)になります。 |
| \(\bigcirc\) と \(|\) | まる・しきりぼう | 重複組合せを数えるときに使う記号。○が「選んだ1個」、\(|\)(仕切り棒)が「種類の切れ目」を表します。○○|○|○○ なら、1種類目を2個・2種類目を1個・3種類目を2個選んだことになります。 |
用語
| 場合の数 | ばあいのかず | 起こりうるパターンが全部で何通りあるかを数えた数。順列・組合せ・重複順列・重複組合せは、どれも場合の数を効率よく数えるための道具です。 |
| 重複 | ちょうふく/じゅうふく | 同じものが2回以上現れること。この単元では「同じものを2回以上選んでよい」という意味で使います。数学では「ちょうふく」と読むのが正式ですが、「じゅうふく」と読まれることもあります。 |
| 重複順列 | ちょうふくじゅんれつ | \(n\) 種類から同じものを何回でも選んでよいとして \(r\) 個を選び、順番まで区別して並べる並べ方。総数は \(n^{r}\) で、記号では \({}_{n}\Pi_{r}\) と書きます。 |
| 重複組合せ | ちょうふくくみあわせ | \(n\) 種類から同じものを何回でも選んでよいとして \(r\) 個を選ぶ、順番を区別しない選び方。総数は \({}_{n}\mathrm{H}_{r} = {}_{n+r-1}\mathrm{C}_{r}\) です。 |
| 同じものを含む順列 | おなじものをふくむじゅんれつ | 「TOMATO」のように同じものが混ざった \(n\) 個を全部並べる並べ方。総数は \(\dfrac{n!}{p!\,q!\cdots}\) で、同じもの同士の並べ替えの分だけ割って重なりを消します。 |
| 順列 | じゅんれつ | \(n\) 個から \(r\) 個選んで、順番を区別して1列に並べる並べ方。記号は \({}_{n}\mathrm{P}_{r}\) で、一度選んだものは二度と選べません。 |
| 組合せ | くみあわせ | \(n\) 個から \(r\) 個選ぶだけで、順番を区別しない選び方。記号は \({}_{n}\mathrm{C}_{r}\) で、一度選んだものは二度と選べません。 |
| 階乗 | かいじょう | \(n\) から \(1\) までの整数をすべて掛け合わせる計算。記号は \(n!\) で、\(n\) 個すべてを並べる並べ方の総数を表します。 |
| 仕切り棒 | しきりぼう | 重複組合せを数えるときに、種類の切れ目を表すために置く記号 \(|\) のこと。\(n\) 種類を区切るには \(n-1\) 本必要で、○と合わせた \(n+r-1\) 個の場所から○の位置を選ぶ問題に置き換えられます。 |
| 多項係数 | たこうけいすう | 同じものを含む順列の総数 \(\dfrac{n!}{p!\,q!\cdots}\) の別名。\((a+b+c)^{n}\) を展開したときの各項の係数がこの形になることからこう呼ばれます。 |
| 樹形図 | じゅけいず | 場合の数をもれなく・重複なく数えるために、枝分かれの図で全パターンを書き出す方法。重複順列は、どの枝からも同じ数の枝が出る樹形図にあたります。 |
| 最短経路 | さいたんけいろ | 碁盤の目のような道で、遠回りせずに目的地へ行く道すじ。右へ \(p\) 区画・上へ \(q\) 区画進む最短経路の数は、同じものを含む順列 \(\dfrac{(p+q)!}{p!\,q!}\) で求められます。 |
前提として理解しておくといいこと
このページの計算を「意味がわかって」使えるようになるために、前提として理解しておくといいことをまとめました。
つまずいたら、この表の内容に戻って復習するのが近道です。
| 掛け算・割り算(小学3〜5年) |
|
| 累乗・指数(中学1年〜高校 数学I) |
|
| 場合の数と樹形図(小学6年〜中学2年) |
|
| 階乗(高校 数学A) |
|
| 順列・組合せ(高校 数学A) |
|
Excelで計算する方法
| 種類の数 n | 10 |
| 並べる個数 r | 4 |
| 重複順列 nΠr | =B1^B2 |
| 種類の数 n | 3 |
| 選ぶ個数 r | 5 |
| ○と仕切りを合わせた場所の数 | =B1+B2-1 |
| 重複組合せ nHr | =COMBIN(B3,B2) |
| 全体の文字数 n(TOMATO) | 6 |
| Tの個数 | 2 |
| Oの個数 | 2 |
| Mの個数 | 1 |
| Aの個数 | 1 |
| 並べ方の総数 N | =FACT(B1)/(FACT(B2)*FACT(B3)*FACT(B4)*FACT(B5)) |
「^」はべき乗の記号、FACTが階乗、COMBINが組合せ(nCr)を計算するExcelの関数です。
1つ目の表は0〜9の10種類から4桁の暗証番号を作る例で、B3に10000と表示されます。
2つ目の表は3種類のジュースから5本買う例で、B3に7(=3+5-1)、B4に21と表示されます。
3つ目の表は「TOMATO」を並べ替える例で、B6に180と表示されます。同じ文字の種類が増えたときは、割る側にFACTを掛け足してください。=MULTINOMIAL(B2,B3,B4,B5) と書いても同じ180になります。
なお、Excelの数値は有効15桁までなので、答えが16桁以上になる場合は末尾の桁が丸められます。
Googleスプレッドシートで計算する方法
| 種類の数 n | 10 |
| 並べる個数 r | 4 |
| 重複順列 nΠr | =B1^B2 |
| 種類の数 n | 3 |
| 選ぶ個数 r | 5 |
| ○と仕切りを合わせた場所の数 | =B1+B2-1 |
| 重複組合せ nHr | =COMBIN(B3,B2) |
| 全体の文字数 n(TOMATO) | 6 |
| Tの個数 | 2 |
| Oの個数 | 2 |
| Mの個数 | 1 |
| Aの個数 | 1 |
| 並べ方の総数 N | =FACT(B1)/(FACT(B2)*FACT(B3)*FACT(B4)*FACT(B5)) |
表を丸ごとコピーしてA1セルに貼り付け、数値を自分の場面に書き換えてください。
Pythonで計算する方法
import math
from collections import Counter
# 1) 重複順列(n種類から重複を許して r 個選び、順番も区別して並べる)
kinds = 10 # 種類の数 n(0〜9の10種類)
picks = 4 # 並べる個数 r(4桁)
repeated_permutations = kinds ** picks
# 2) 重複組合せ(n種類から重複を許して r 個選ぶ。順番は区別しない)
juice_kinds = 3 # 種類の数 n(3種類のジュース)
bottles = 5 # 選ぶ個数 r(5本)
repeated_combinations = math.comb(juice_kinds + bottles - 1, bottles)
# 3) 同じものを含む順列(同じ文字が混ざった文字列の並べ替え)
word = "TOMATO"
letter_counts = Counter(word)
same_item_permutations = math.factorial(len(word))
for count in letter_counts.values():
same_item_permutations //= math.factorial(count)
print(f"重複順列({kinds}種類から{picks}個並べる): {repeated_permutations}")
print(f"重複組合せ({juice_kinds}種類から{bottles}個選ぶ): {repeated_combinations}")
print(f"{word} の並べ替え: {same_item_permutations}")
数式記述言語(LaTeX等)での書き方(コピペ可)
ₙΠᵣ = nʳ
{}_{n}\Pi_{r} = n^{r}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mmultiscripts>
<mi>Π</mi>
<mi>r</mi><none/>
<mprescripts/>
<mi>n</mi><none/>
</mmultiscripts>
<mo>=</mo>
<msup><mi>n</mi><mi>r</mi></msup>
</mrow>
</math>
n^r
n^r
repeatedPermutation := n^r;
repeated_permutation = n^r;
n^r
ₙHᵣ = ₙ₊ᵣ₋₁Cᵣ
{}_{n}\mathrm{H}_{r} = {}_{n+r-1}\mathrm{C}_{r} = \dfrac{(n+r-1)!}{r!\,(n-1)!}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mmultiscripts>
<mi>H</mi>
<mi>r</mi><none/>
<mprescripts/>
<mi>n</mi><none/>
</mmultiscripts>
<mo>=</mo>
<mmultiscripts>
<mi>C</mi>
<mi>r</mi><none/>
<mprescripts/>
<mrow><mi>n</mi><mo>+</mo><mi>r</mi><mo>−</mo><mn>1</mn></mrow><none/>
</mmultiscripts>
</mrow>
</math>
H(n, r) = C(n+r-1, r)
Binomial[n + r - 1, r]
nHr := binomial(n + r - 1, r);
nhr = nchoosek(n + r - 1, r);
H(n,r) = C(n+r−1, r) = (n+r−1)!/(r!(n−1)!)
N = n! ÷ (p! × q! × r! × ⋯)
N = \dfrac{n!}{p!\,q!\,r!\cdots}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<mfrac>
<mrow><mi>n</mi><mo>!</mo></mrow>
<mrow>
<mi>p</mi><mo>!</mo>
<mi>q</mi><mo>!</mo>
<mi>r</mi><mo>!</mo>
<mo>⋯</mo>
</mrow>
</mfrac>
</mrow>
</math>
N = (n!)/(p!q!r!cdots)
Multinomial[p, q, r]
N := factorial(n)/(factorial(p)*factorial(q)*factorial(r));
N = factorial(n)/(factorial(p)*factorial(q)*factorial(r));
N = n!/(p!q!r!⋯)
ChatGPT に聞いて計算してもらう方法
あなたは場合の数(順列・組合せ)の計算アシスタントです。次の3つの計算を、必ずPythonコードを実際に実行して行い、実行結果の数値だけを根拠に回答してください(暗算や推測で答えないでください)。 1. 0〜9の10種類の数字を使って4桁の暗証番号を作る方法は何通りありますか(同じ数字を何回使ってもよい)。 2. 3種類のジュースから、同じ種類を何本選んでもよいとして5本買う方法は何通りありますか(本数の組み合わせだけを数え、選ぶ順番は区別しない)。 3. 「TOMATO」の6文字を並べ替えてできる文字列は何通りありますか。 それぞれについて、重複順列・重複組合せ・同じものを含む順列のどれを使ったかと、その理由、実行結果の数値を示してください。Pythonでは math モジュール(math.comb・math.factorial)と collections.Counter を使ってください。
計算ドリル(演習問題)
このページの式を、自分の手で計算できるようになるための演習問題です。
答えと解説は解答ページにあります。
使い方
-
1数値を入力計算したい数値を入力欄に入力します
-
2計算「計算する」ボタンを押します
-
3結果を確認計算結果がその場に表示されます。計算の考え方や式の解説も同じページで確認できます
DataChefの特徴
専門知識不要、直感的で簡単な操作
個人情報を登録することなく使用できます
「ダウンロード」押下でファイルを自動削除
クレジット表記不要
商用利用許諾の連絡も不要です
