並べ方の種類を選び、並べるものの個数 n を入力してください。円形に並べる場合の数を、途中式と図付きで計算します。
このページでできること
- 円形のテーブルに \(n\) 人が座る座り方(円順列)\((n-1)!\) を、人数を入れるだけで計算できます
- \(n\) 個から \(r\) 個だけ選んで円形に並べる場合の数 \(\dfrac{{}_{n}\mathrm{P}_{r}}{r}\) にも対応しています
- ネックレスのように「裏返して重なるものは同じ」と数えるじゅず順列 \(\dfrac{(n-1)!}{2}\) も計算できます(そのまま割ると誤りになる \(n = 1,\ 2\) の場合も正しく処理します)
- 「特定の2人が隣り合う」「隣り合わない」座り方も、2人を1つの塊とみなす途中式付きで計算できます
- 答えは丸めずに全桁表示します。桁数が多いときは \(1.23\times10^{35}\) のような概数も添えるので、大きさがひと目でつかめます
- 「なぜ \(n!\) を \(n\) で割るのか」を回転の図で確かめられます。Excel/Googleスプレッドシート/Python用のコピペ数式・計算ドリル(演習問題)もこのページにまとまっています
この計算は何の役に立つ?
円形のテーブルでは、テーブルごと回しても「誰の隣が誰か」という関係は変わりません。だから席順の数は直線に並べる \(n!\) 通りではなく、円順列の \((n-1)!\) 通りになります。6人なら 120 通り、8人なら 5,040 通りです。
席次に「この2人は隣どうしにしたい(または離したい)」という要望が入ると数は大きく変わり、6人で特定の2人を隣にする座り方は 48 通り、隣にしない座り方は 72 通りです。幹事が悩む「席替え案は何パターンあるのか」を、感覚ではなく数で押さえられます。
営業所も1つの立ち寄り先と数えて、全部で \(n\) 箇所を1回ずつ通って一周するルートを考えます。同じ道順なら、どこを出発点にしても輪としては同じ(回転)で、行きと帰りで距離が変わらない道なら逆回りも同じ距離になります(裏返し)。そのため区別できるルートの数はじゅず順列と同じ \(\dfrac{(n-1)!}{2}\) 通りです。
営業所を含めて10箇所なら 181,440 通り、15箇所なら約 \(4.36\times10^{10}\) 通り。全部試して一番短いものを選ぶのは現実的ではないため、配送計画のソフトは近道を探す工夫(最適化の手法)を使います。「全部調べる作戦が通用しない」ことを示す根拠が、この場合の数です。
色や形の違うビーズ \(n\) 個を1周につなぐデザインの数は、じゅず順列の \(\dfrac{(n-1)!}{2}\) 通りです。輪は回しても裏返しても同じ品物なので、円順列をさらに \(2\) で割ります。ビーズが5個なら 12 通り、6個なら 60 通りです。
ただし、ビーズの片面だけに模様があるなど「表と裏が区別できて、ひっくり返して使えない」作りなら、裏返しを同じとみなせません。そのときは \(2\) で割らずに円順列の \((n-1)!\) 通り(6個なら 120 通り)で数えます。裏返して使えるかどうかだけで、デザインの数は2倍変わります。
多くのゲームは手番が座席に沿って一定方向に回ります。この「誰の次が誰か」という回り順の型は、席を丸ごと回しても変わらないので、円順列の \((n-1)!\) 通りです。4人なら 6 通り、5人なら 24 通りになります。
先手が有利なゲームでは、誰が最初に打つかまで区別したくなります。その場合は回り順の型 \((n-1)!\) 通りに、先手を選ぶ \(n\) 通りを掛けて \(n!\) 通り(4人なら 24 通り)。「席の並びだけの問題」と「先手も含めた問題」を分けて数えられると、公平な決め方を考えるときに迷いません。
「この順番で回して、最後まで行ったら先頭に戻る」という当番表は、誰から始めても同じ循環になるので円順列で数えます。5人の当番表なら \((5-1)! = 24\) 通りです。
ここに「この2人は続けて(隣に)しない」という条件が入ると、全体から2人が隣り合う場合を引いて \((n-1)! - 2 \times (n-2)!\) 通り。5人なら 24 − 12 = 12 通りに絞られます。条件を1つ足すだけで候補が半分になることが、式から具体的に見えます。
式と図
用語・記号の解説
記号
| \(n\) | エヌ | 並べるものの全体の個数。number(数)の頭文字で、「個数」を表す文字として広く使われます。このページでは円卓に座る人数や、輪につなぐ玉の個数にあたります。 |
| \(r\) | アール | 全体 \(n\) 個の中から選んで実際に並べる個数。\({}_{n}\mathrm{P}_{r}\) のように \(n\) とセットで使われ、「\(n\) 個から \(r\) 個」と読みます。 |
| \(n!\) | エヌのかいじょう | 階乗。\(n! = n \times (n-1) \times \cdots \times 2 \times 1\) で、\(n\) 個すべてを1列に並べる並べ方の数を表します。ビックリマークのこの書き方は、1808年にフランスの数学者クランプが使い始めたといわれます。なお \(0! = 1\) と決められています。 |
| \({}_{n}\mathrm{P}_{r}\) | エヌ・ピー・アール | 順列。\(n\) 個から \(r\) 個を選んで1列に並べる並べ方の数で、\({}_{n}\mathrm{P}_{r} = n \times (n-1) \times \cdots \times (n-r+1)\) と計算します。\(\mathrm{P}\) は permutation(順列)の頭文字です。 |
| \(N\) | 大文字のエヌ | このページで円順列の総数を表す文字。number(数)の頭文字を大文字にしたもので、「求めたい個数」を置く文字としてよく使われます。 |
| \(M\) | エム | このページでじゅず順列の総数を表す文字。\(N\) の隣のアルファベットで、\(N\) とは別の「もう1つの個数」を置きたいときに使われます。 |
| \(A,\ B\) | エー・ビー | このページで、特定の2つが隣り合う並べ方の総数を \(A\)、隣り合わない並べ方の総数を \(B\) として表します。アルファベットの最初の方の文字は「求めたい決まった数」を置くときの慣例です。 |
| \((n-1)!\) | エヌひく1のかいじょう | 円順列の総数を表す式。\(n\) 個を円形に並べるとき、回して重なる \(n\) 通りの重なりを取り除いた結果です。「1つを固定して、残りの \(n-1\) 個を並べる」と考えても同じ式になります。 |
用語
| 場合の数 | ばあいのかず | ある条件を満たすやり方が全部で何通りあるか、という数のこと。高校では数学Aで学びます。「何通り?」と聞かれたら場合の数を求める問題です。 |
| 順列 | じゅんれつ | いくつかのものを、順番を区別して並べたもの。またはその並べ方の数。1列に並べる場合を特に直線順列と呼び、\({}_{n}\mathrm{P}_{r}\) で数えます。 |
| 直線順列 | ちょくせんじゅんれつ | 横一列(直線)に並べる普通の順列のこと。円順列と区別したいときにこう呼びます。左から順に並ぶので、端があり、ずらせば別の並びになります。 |
| 円順列 | えんじゅんれつ | ものを円形(輪)に並べる並べ方。回して重なる並べ方は同じ1通りと数えるのが決まりで、\(n\) 個なら \((n-1)!\) 通りになります。 |
| じゅず順列 | じゅずじゅんれつ | 数珠順列とも書きます。円順列のうち、裏返して重なる並べ方も同じ1通りと数えるもの。ネックレスやブレスレットのように、ひっくり返せる輪を数えるときに使い、\(n\) が \(3\) 以上なら \(\dfrac{(n-1)!}{2}\) 通りです。 |
| 階乗 | かいじょう | \(1\) から \(n\) までの整数をすべて掛け合わせた数のこと(記号は \(n!\))。\(n\) 個のものを1列に並べる並べ方の数と同じで、\(n\) が増えると爆発的に大きくなります(\(10! = 3{,}628{,}800\))。 |
| 回転して重なる | かいてんしてかさなる | 輪の並びをそのまま回すと、別の並びとぴったり同じになること。円順列では、こうして重なる並べ方は区別せず同じ1通りと数えます。1周の間に \(n\) 通りの重なりが生じます。 |
| 裏返して重なる | うらがえしてかさなる | 輪をひっくり返すと(鏡に映したように左右を逆にすると)、別の並びと同じになること。じゅず順列では、これも同じ1通りと数えます。 |
| 塊とみなす | かたまりとみなす | 「必ず隣り合う」という条件があるものどうしを、ひもで縛って1個のものとして扱う考え方。全体の個数が1つ減り、最後に塊の中の並び順の数を掛けます。 |
| 余事象 | よじしょう | ある条件が起こらない場合の全体。\(\overline{A}\) と書きます。「隣り合わない」のように直接数えにくい条件は、全体から「隣り合う」場合を引いて求めます。 |
| 重複して数える | ちょうふくしてかぞえる | 同じものを2回以上数えてしまうこと。円順列では、同じ輪の並びを \(n\) 回ずつ数えてしまうので、最後に \(n\) で割って重なりを取り除きます。 |
| 1つを固定する | ひとつをこていする | 円順列の定番の考え方。誰か1人の位置を先に決めてしまえば、もう回して重ねることができなくなるので、残りの \(n-1\) 個を1列に並べるのと同じになります。 |
| 積の法則 | せきのほうそく | 「Aの決め方が \(a\) 通り、そのそれぞれについてBの決め方が \(b\) 通り」なら、全体は \(a \times b\) 通り、という数え方の決まり。塊の円順列に並び順の \(2\) を掛けるのもこの法則です。 |
前提として理解しておくといいこと
このページの計算を「意味がわかって」使えるようになるために、前提として理解しておくといいことをまとめました。
つまずいたら、この表の内容に戻って復習するのが近道です。
| 場合の数の基本(高校 数学A) |
|
| 順列と階乗(高校 数学A) |
|
| 割り算で重なりを取り除く考え方(小学3年〜5年) |
|
| 図形の回転と対称(小学5年〜中学1年) |
|
| 余事象(高校 数学A) |
|
Excelで計算する方法
| 並べるものの個数 n | 8 |
| 円順列の総数 (n−1)! | =FACT(B1-1) |
| 全体の個数 n | 8 |
| 円形に並べる個数 r | 3 |
| 1列に並べる並べ方 nPr | =PERMUT(B1,B2) |
| 円順列の総数 nPr÷r | =B3/B2 |
| 並べるものの個数 n | 5 |
| じゅず順列の総数 | =IF(B1<=2,1,FACT(B1-1)/2) |
| 並べるものの個数 n | 6 |
| 条件を付けない円順列 (n−1)! | =FACT(B1-1) |
| 2つが隣り合う 2×(n−2)! | =2*FACT(B1-2) |
| 2つが隣り合わない | =B2-B3 |
FACT は階乗(n!)、PERMUT は順列(nPr)を計算する関数です。
1つ目の表は8人の円卓の座り方で、答えは 5040 になります。
2つ目の表は8人から3人を選んで円卓に座らせる座り方で、nPr が 336、それを r で割って 112 になります。
3つ目の表の IF は、n が 2 以下のときに 2 で割ってはいけないための場合分けです。n に 5 を入れると 12 になります。
4つ目の表は6人の円卓の例で、条件なしが 120、隣り合うが 48、隣り合わないが 72 になります。
Googleスプレッドシートで計算する方法
| 並べるものの個数 n | 8 |
| 円順列の総数 (n−1)! | =FACT(B1-1) |
| 全体の個数 n | 8 |
| 円形に並べる個数 r | 3 |
| 1列に並べる並べ方 nPr | =PERMUT(B1,B2) |
| 円順列の総数 nPr÷r | =B3/B2 |
| 並べるものの個数 n | 5 |
| じゅず順列の総数 | =IF(B1<=2,1,FACT(B1-1)/2) |
| 並べるものの個数 n | 6 |
| 条件を付けない円順列 (n−1)! | =FACT(B1-1) |
| 2つが隣り合う 2×(n−2)! | =2*FACT(B1-2) |
| 2つが隣り合わない | =B2-B3 |
Pythonで計算する方法
from math import factorial, perm
n = 8 # 並べるものの個数
r = 3 # 円形に並べる個数(n個から選ぶとき)
# 円順列:n個すべてを円形に並べる
circular = factorial(n - 1)
# 円順列:n個からr個選んで円形に並べる
circular_select = perm(n, r) // r
# じゅず順列:裏返して重なるものは同じとみなす
# n が 1 か 2 のときは裏返しても並びが変わらないので、2で割らずに1通り
necklace = 1 if n <= 2 else factorial(n - 1) // 2
# 特定の2つが隣り合う/隣り合わない円順列(n が 3 以上のとき)
adjacent = 2 * factorial(n - 2)
not_adjacent = factorial(n - 1) - adjacent
print(f"円順列: {circular}")
print(f"{n}個から{r}個選ぶ円順列: {circular_select}")
print(f"じゅず順列: {necklace}")
print(f"隣り合う: {adjacent} 隣り合わない: {not_adjacent}")
数式記述言語(LaTeX等)での書き方(コピペ可)
N = n! ÷ n = (n−1)!
N = \frac{n!}{n} = (n-1)!
<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>
<mi>n</mi>
</mfrac>
<mo>=</mo>
<mo>(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo>)</mo><mo>!</mo>
</mrow>
</math>
N = (n!)/n = (n-1)!
N = (n - 1)!
N := (n-1)!;
N = factorial(n-1);
N = n!/n = (n-1)!
N = ₙPᵣ ÷ r
N = \frac{{}_{n}P_{r}}{r}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>N</mi>
<mo>=</mo>
<mfrac>
<mrow><mmultiscripts><mi>P</mi><mi>r</mi><none/><mprescripts/><mi>n</mi><none/></mmultiscripts></mrow>
<mi>r</mi>
</mfrac>
</mrow>
</math>
N = (nPr)/r
N = (n!/(n - r)!)/r
N := numbperm(n, r)/r;
N = nchoosek(n,r)*factorial(r)/r;
N = nPr/r
M = (n−1)! ÷ 2
M = \frac{(n-1)!}{2}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>M</mi>
<mo>=</mo>
<mfrac>
<mrow><mo>(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo>)</mo><mo>!</mo></mrow>
<mn>2</mn>
</mfrac>
</mrow>
</math>
M = ((n-1)!)/2
M = (n - 1)!/2
M := (n-1)!/2;
M = factorial(n-1)/2;
M = (n-1)!/2
A = 2 × (n−2)!
A = 2 \times (n-2)!
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>A</mi>
<mo>=</mo>
<mn>2</mn>
<mo>×</mo>
<mo>(</mo><mi>n</mi><mo>−</mo><mn>2</mn><mo>)</mo><mo>!</mo>
</mrow>
</math>
A = 2 * (n-2)!
A = 2 (n - 2)!
A := 2*(n-2)!;
A = 2*factorial(n-2);
A = 2(n-2)!
B = (n−1)! − 2 × (n−2)!
B = (n-1)! - 2 \times (n-2)!
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>B</mi>
<mo>=</mo>
<mo>(</mo><mi>n</mi><mo>−</mo><mn>1</mn><mo>)</mo><mo>!</mo>
<mo>−</mo>
<mn>2</mn>
<mo>×</mo>
<mo>(</mo><mi>n</mi><mo>−</mo><mn>2</mn><mo>)</mo><mo>!</mo>
</mrow>
</math>
B = (n-1)! - 2 * (n-2)!
B = (n - 1)! - 2 (n - 2)!
B := (n-1)! - 2*(n-2)!;
B = factorial(n-1) - 2*factorial(n-2);
B = (n-1)! - 2(n-2)!
ChatGPT に聞いて計算してもらう方法
あなたは数学(場合の数)の計算アシスタントです。次の計算を、必ずPythonコードを実際に実行して行い、実行結果の数値だけを根拠に回答してください(暗算や推測で答えないでください)。 8人が円形のテーブルに座るときの座り方について、次の4つを求めてください。 1. 8人全員の円順列(回して重なる座り方は同じ1通りと数える) 2. 8人から3人を選んで、3人がけの円形のテーブルに座らせる座り方 3. 8個の玉を輪につないだじゅず順列(回しても裏返しても同じものは1通りと数える) 4. 8人の円卓で、特定の2人が隣り合う座り方と、隣り合わない座り方 Pythonでは標準ライブラリの math モジュール(factorial・perm)を使って厳密に計算し、使った式と実行結果の数値を示してください。あわせて、それぞれの式がなぜその形になるのかも説明してください。
計算ドリル(演習問題)
このページの式を、自分の手で計算できるようになるための演習問題です。
答えと解説は解答ページにあります。
使い方
-
1数値を入力計算したい数値を入力欄に入力します
-
2計算「計算する」ボタンを押します
-
3結果を確認計算結果がその場に表示されます。計算の考え方や式の解説も同じページで確認できます
DataChefの特徴
専門知識不要、直感的で簡単な操作
個人情報を登録することなく使用できます
「ダウンロード」押下でファイルを自動削除
クレジット表記不要
商用利用許諾の連絡も不要です
