Math World Lab

順列と組み合わせ(nPr と nCr)

「並べる順番」を区別するかどうか。パスワードセキュリティとガチャ確率の数理

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
順列(nPr)は「並べる順番を考慮する」選び方、組み合わせ(nCr)は「グループとして誰がいるかだけ」を見る選び方
2
パスワードの安全性は文字種数^桁数の「重複順列」で決まり、桁数が1つ増えるだけで攻撃者の解析時間は数十〜数百倍に跳ね上がる
3
ソシャゲのガチャで「確率 1% を 100 回引いても約 36.6% の人は当たらない」という直感との乖離は余事象の確率計算で解明される

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

サイコロ賭博の公平な配分問題(パスカルとフェルマーの往復書簡)から、あらゆる「選び方・並べ方」の総数を数え漏れ・重複なく算出するために体系化された。

身につく武器・思考力

「並び順が関係あるか否か」を瞬時に見分け、天文学的な組み合わせ爆発を見積もってリスクや計算量を判断できるようになる。

実社会・ITでの活躍現場

  • •サイバーセキュリティにおけるパスワード強度(総当たり耐性)評価
  • •ソーシャルゲームのガチャ排出確率・天井設定のシミュレーション
  • •ハッシュ衝突耐性(誕生日攻撃)の暗号学的安全性の証明
  • •ネットワークの通信経路数やトーナメント戦の組み合わせ設計

Layer 1 — 直感・シミュレーター

2つのタブ(パスワード解析時間シミュレータ / ガチャ確率シミュレータ)を操作してみよう。パスワードの文字種(英小文字・英数字・記号)や桁数を増やすと総組み合わせ数が天文学的に跳ね上がり、スーパーコンピュータでも解読に何万年もかかる理由が一目で理解できる。

パスワード桁数:8 桁
4桁(危険)8桁(最低基準)12桁(推奨)16桁(極めて強固)
使用する文字種(総プール数: 36 種類):
組み合わせ総数(N^L)
2,821,109,907,456 通り

文字種 36 通りの文字が 8 桁並ぶ重複順列:368{36}^{8}

解読にかかる推定時間(秒間100億回試行)
約 2.4 分

⚡ 短期間で突破されるリスクがあります。桁数を増やしましょう。

直感チェック!ミニクイズ

排出率 1%(0.01)のガチャを 100 連引いたとき、少なくとも 1 回以上当たる確率は約何%か?

Layer 2 — 定義・受験・証明

定義

異なる nn 個のものから異なる rr 個を選んで並べる順列の数を nPr_n\mathrm{P}_r、並べる順序を考慮せず単に rr 個の組を選ぶ組み合わせの数を nCr_n\mathrm{C}_r と書く。 - 順列: nPr=n(n−1)(n−2)⋯(n−r+1)=n!(n−r)!_n\mathrm{P}_r = n(n-1)(n-2)\cdots(n-r+1) = \dfrac{n!}{(n-r)!} - 組み合わせ: nCr=nPrr!=n!r!(n−r)!_n\mathrm{C}_r = \dfrac{_n\mathrm{P}_r}{r!} = \dfrac{n!}{r!(n-r)!} - 重複順列: 異なる nn 種類から重複を許して rr 個並べる総数は nrn^r

公式・数理モデル

nPr=n!(n−r)!,nCr=n!r!(n−r)!,nr_n\mathrm{P}_r = \frac{n!}{(n-r)!}, \quad _n\mathrm{C}_r = \frac{n!}{r!(n-r)!}, \quad n^r

証明・導出

組み合わせの公式の導出: nn 個から rr 個を選んで並べる手順を2段階で考える。 1. まず nn 個から rr 個を選ぶ(選び方は nCr_n\mathrm{C}_r 通り) 2. 選んだ rr 個を一列に並べる(並べ方は r!r! 通り)

積の法則より、この連続操作の総数は nCr×r!_n\mathrm{C}_r \times r! となる。これは初めから nn 個から rr 個を選んで並べる順列 nPr_n\mathrm{P}_r に他ならない。

nCr×r!=nPr_n\mathrm{C}_r \times r! = _n\mathrm{P}_r

両辺を r!r! で割ることで、

nCr=nPrr!=n!r!(n−r)!_n\mathrm{C}_r = \frac{_n\mathrm{P}_r}{r!} = \frac{n!}{r!(n-r)!}

という公式が導かれる。順序の区別を無くすために、並び順の総数 r!r! で割るという考え方が本質である。

押さえておきたいポイント

  • 「順番が関係ある」なら順列(P)、「チーム分けのように順序不問」なら組み合わせ(C)
  • 性質: nCr=nCn−r_n\mathrm{C}_r = _n\mathrm{C}_{n-r}(「選ぶ」ことと「選ばないものを決める」ことは同義)
  • 二項定理 (a+b)n=∑k=0nnCkan−kbk(a+b)^n = \sum_{k=0}^n {_n\mathrm{C}_k} a^{n-k} b^k の係数(パスカルの三角形)として現れる
  • パスワードの安全性(エントロピー)は、文字種数 NN と桁数 LL による NLN^L で指数関数的に増大する
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

パスワードのエントロピー計算とブルートフォース攻撃耐性評価

サイバーセキュリティにおいて、パスワードの強度は総当たり(ブルートフォース)攻撃に必要な試行回数(組み合わせ数 NLN^L)と、それを毎秒何億回試行できるかで評価される。桁数による組み合わせ数の爆発が防御の最大の武器となる。

1// パスワードの組み合わせ総数と解読時間の試算
2interface SecurityReport {
3 totalCombinations: bigint;
4 secondsToCrack: number;
5 readableTime: string;
6}
7
8function evaluatePasswordStrength(
9 length: number,
10 options: { lowercase: boolean; uppercase: boolean; numbers: boolean; symbols: boolean }
11): SecurityReport {
12 let charPoolSize = 0;
13 if (options.lowercase) charPoolSize += 26;
14 if (options.uppercase) charPoolSize += 26;
15 if (options.numbers) charPoolSize += 10;
16 if (options.symbols) charPoolSize += 32;
17
18 // 総組み合わせ数 = (文字種数)^桁数 (重複順列)
19 const poolBig = BigInt(charPoolSize);
20 const total = poolBig ** BigInt(length);
21
22 // 攻撃者の試行速度: 秒間 100億回 (10^10 / sec) のGPUクラスタを想定
23 const guessesPerSecond = 10_000_000_000n;
24 const secondsBig = total / (guessesPerSecond * 2n); // 平均して半分の探索でヒット
25 const seconds = Number(secondsBig > BigInt(Number.MAX_SAFE_INTEGER) ? Number.MAX_SAFE_INTEGER : secondsBig);
26
27 let readableTime = "1秒未満";
28 if (seconds > 31536000 * 1000) {
29 readableTime = `約 ${(seconds / 31536000).toExponential(1)} 年(解読不可能)`;
30 } else if (seconds > 31536000) {
31 readableTime = `約 ${(seconds / 31536000).toFixed(1)} 年`;
32 } else if (seconds > 86400) {
33 readableTime = `約 ${(seconds / 86400).toFixed(1)} 日`;
34 } else if (seconds > 60) {
35 readableTime = `約 ${(seconds / 60).toFixed(1)} 分`;
36 }
37
38 return { totalCombinations: total, secondsToCrack: seconds, readableTime };
39}
40
41// 例: 数字のみ8桁 vs 英数記号12桁
42const weak = evaluatePasswordStrength(8, { lowercase: false, uppercase: false, numbers: true, symbols: false });
43const strong = evaluatePasswordStrength(12, { lowercase: true, uppercase: true, numbers: true, symbols: true });
44
45console.log(`数字8桁: ${weak.readableTime}`); // 1秒未満
46console.log(`英数記号12桁: ${strong.readableTime}`); // 何万年以上

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

関連度高高校数学

二項定理とパスカルの三角形(フラクタル構造)

多項式展開の係数に潜む美しい規則性と、奇数・偶数の色分けで現れる幾何学フラクタル

関連度高小学校・算数

場合の数と樹形図(組み合わせの初歩)

「もれなく、重複なく」数え上げるための樹形図と積の法則

関連度高高校数学

確率分布と二項分布(期待値と分散)

「平均して何回当たるか?」「どれくらいブレるのか?」を定量化するデータサイエンスの土台

同じレベルで次に挑戦したいトピック

同レベル推薦高校数学

ベクトルの内積

2本の矢印の「向きの近さ」を1つの数値にする

同レベル推薦高校数学

三角関数(単位円とサイン・コサイン)

回転する点のx座標・y座標が三角関数の正体

同レベル推薦高校数学

微分の基本(接線と変化率)

平均変化率の極限として現れる「その瞬間の傾き」

工学・実社会での応用先でつながるトピック

工学・実践連携小学校・算数

最小公倍数・最大公約数

数直線に並ぶ倍数と、ユークリッドの互除法で公約数を探る

xy122436
工学・実践連携中学数学

関数の概念と対応表

「1つの入力にはただ1つの出力」というルールを対応表で確かめる

🎂🎂MATCH!わずか23人で 50.7%
工学・実践連携中学数学

誕生日問題(直感に反する確率のパラドックス)

「わずか23人で50%以上が同じ誕生日?」人間の直感がバグる組み合わせ爆発の謎

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。