0

OMC対策(C分野:包除原理)

44
0

本記事の前提知識

 本記事では,集合Sの要素の個数を絶対値記号|S|で表す.次の知識は前提とするため,知らなければこの先を読み進めるのは難しいと思う.  

2つ,3つの集合についての包除原理

 有限集合A1,A2,A3に対して
  |A1A2|=|A1|+|A2||A1A2|
  |A1A2A3|=|A1|+|A2|+|A3||A1A2||A2A3||A3A1|+|A1A2A3|

 参考までに,次のような問題が難なく解ければ本記事は読めると思う.

 60以下の正整数で,2または3または5で割り切れるものはいくつあるか.


(解答)60以下の正整数で,2で割り切れるものの集合をA3で割り切れるものの集合をB5で割り切れるものの集合を5とおく.求めるべきは|ABC|である.
 |A|=30,|B|=20,|C|=12,|AB|=10,|BC|=4,|CA|=6,|ABC|=2なので,|ABC|=44個である.

 次の公式も,練習問題等で使っている.

ド・モルガンの法則

 有限集合A1,,Anに対して
  A1An=A1An
  A1An=A1An

 証明は省略する.

一般の包除原理

 高校の数学の教科書の多くには,公式1(集合が2,3個の場合)が載っている.そこで「集合が4つ以上だとどうなるのだろう」と考えるのは自然である.
 答えは,冒頭の公式1から十分推測できるものであり(つまり覚えやすい),|A1Ak|の集合の個数が奇数個であれば+1,偶数個であれば1が係数となる.
 例えば|A1A2A3A4|であれば次のように書ける.
|A1A2A3A4|=|A1|+|A2|+|A3|+|A4||A1A2||A1A3||A1A4||A2A3||A2A4||A3A4|+|A1A2A3|+|A1A2A4|+|A1A3A4|+|A2A3A4||A1A2A3A4|

|A1A2A3A4A5|であれば次のようになる.
|A1A2A3A4A5|=|A1|+|A2|+|A3|+|A4|+|A5||A1A2||A4A5|+|A1A2A3|++|A3A4A5||A1A2A3A4||A2A3A4A5|+|A1A2A3A4A5|

 これをさらに一般化したものが,次の式である.

包除原理

 有限集合A1,,Anに対して
  |i=1nAi|=k=1n((1)k1k|jAj|)

 右辺がわかりづらいと思うので補足しておく.(1)k1の部分は,共通部分を取る集合の個数によって正負が入れかわることを表している.k|jAj|は,k個の集合の共通部分全てについて(つまりnCk通りについて),その要素の個数を足していく.
 手始めに,全くありがたみのない例ではあるが,次の例を考えよう.

 集合A1==An={1}とすると,当然i=1nAi={1}であり,|i=1nAi|=1である.
 包除原理を適用して,こうなることを確かめよ.

解答
 任意の選び方に対して|jAj|=1である(j0個の場合は,包除原理では現れない).
 よってk|jAj|=nCk通り1=nCkであり,
 k=1n((1)k1k|jAj|)=k=1n(1)k1nCkの値を求めればよい.二項定理を考えるとこの値は確かに1である.
  

 もう少しまともな例として,次の問題を考えてみよ.オイラーのϕ関数を知っていたとしても,包除原理を用いて考えてほしい.

 210以下の正整数で,2または3または5または7で割り切れるものはいくつあるか.

解答
 次の式を参考にせよ.
|A1A2A3A4|=|A1|+|A2|+|A3|+|A4||A1A2||A1A3||A1A4||A2A3||A2A4||A3A4|+|A1A2A3|+|A1A2A4|+|A1A3A4|+|A2A3A4||A1A2A3A4|
 1行目は105+70+42+302行目は352115141063行目は2+3+5+74行目は1であり,合計は162個である.
 

 この問題3の一般化として,次の定理が得られる.

オイラーのϕ関数

 n以下でnと互いに素な正整数の個数をϕ(n)で表す(これは一般的な記法である).
 nを素因数分解するとn=p1e1pkekと表されるとき(ただしek0),
  ϕ(n)=n(11p1)(11pk)

証明の方針
 問題3を解く際に「1行目は105+70+42+302行目は352115141063行目は2+3+5+74行目は1」と書いたが,これを次のように書き直してみよう.
 1行目は210×(12+13+15+17)2行目は210×(16+110+114+115+121+135)3行目は210×(130+142+170+1105)4行目は210×1210

 さて,ϕ(210)は,210から上の値を全て引いたものである.つまり
 
ϕ(210)=210×(112131517+16+110+114+115+121+1351301421701105+1210)=210(112)(113)(115)(117)

 このように,オイラーのϕ関数に相当するものが導かれる.
 以上の式変形を,文字を使って書き直せば,オイラーのϕ関数の性質を証明できる(記述するのは面倒なので割愛する).
 

包除原理を用いた具体例

 まずは,有名な具体例を2つ挙げよう.
 どちらも,できれば証明を見る前に,包除原理を適用して確かめてみてほしい.

かく乱順列(完全順列)の個数

 1,2,,nの並べ替えa1,a2,anであって,任意のkに対してakkであるようなものを,かく乱順列(または完全順列)と呼ぶ.
 そのような順列の個数は,n!k=0n(1)kk!である.


 なお,その値はn!eに最も近い整数値に一致する(この証明はマクローリン展開を使えばよい.本記事の主旨からは逸れるので省略する).

証明のヒント
 ai=iであるような並べ替えを全て含む集合をAiとする.
 |Ai|ai=iを満たす順列の個数なので,(n1)!となる.
 
証明
 ai=iであるような並べ替えを全て含む集合をAiとする.
 包除原理の公式|i=1nAi|=k=1n((1)k1k|jAj|)において,|jAj|=(nk)!であり,k|jAj|=nCk(nk)!=n!k!となる.
 よって|i=1nAi|=k=1n(1)k1n!k!であり,かく乱順列の個数はn!からこの値を引けばよい.
 

 包除原理を使う問題(証明)においては,この例のように,それぞれのAiが何なのかを明確にするとよい.
 もう一つ,次の命題も有名な例である.

全射の個数

 knを満たす正整数に対して,次の条件を満たす数列を考える.

  • 長さnの数列である
  • a1,,anはいずれも1以上k以下の正整数である
  • 1以上k以下のいずれの正整数も,数列の項の中に存在する.

 このような数列はi=1k(1)kikCiin個存在する.

証明のヒント
 上の2つの条件を満たし,かつ,数列の項としてiを含まないような数列の個数をAiとする.
 Aiは,iを含まない以外に追加の条件がない(別の数iを含まなくてもよい)ため,|Ai|=(k1)nである.
 
証明
 上の2つの条件を満たし,かつ,数列の項としてiを含まないような数列の個数をAiとする.
 包除原理の公式|i=1kAi|=i=1k((1)i1i|jAj|)において(添え字が微妙に異なることに注意せよ),|jAj|=(ki)nであり,i|jAj|=kCi(ki)nとなる.
 よって|i=1kAi|=i=1k(1)i1kCi(ki)nであり,全射の個数はknからこの値を引けばよい(内部のkiiに置き換えよ).
 

 以上の2つの例は,非常に有名で,包除原理の解説をする際によく登場する例である.
 ここから3題,オリジナルの練習問題を用意した.いずれもOMCの難易度で300前後のものだろう.計算がやや面倒なので,立式までで答え合わせをしてもよい.

 20以下の正整数から10個の正整数を選ぶ方法で,次の条件を満たすものは何通りあるか.
(条件)5で割った余りが0,1,2,3,4であるような数を,それぞれ1つ以上含む.


(具体例){1,2,3,4,5,6,7,8,9,10}は条件を満たす.{1,2,3,4,6,7,8,9,11,12}は,5で割った余りが0のものを含まず,条件を満たさない.

ヒント
 5で割った余りがiであるような数を含まないような選び方をAiとする.
 
解答
 5で割った余りがiであるような数を含まないような選び方をAiとする.
 求めたいものは|A0A4|=|A0A4|である.|A0A4|の値を求め,20C10から引けばよい.
 |Ai|=16C10|AiAj|=12C10なので,包除原理より
  |A0A4|=5×16C1010×12C10
である.従って求めるべき値は20C105×16C10+10×12C10=145376通り.
 

 さいころを9個投げる.ちょうど3個出ているような目が存在する確率を求めよ.


(具体例)9個投げたときの出目が,1,1,1,2,2,3,4,5,61,1,1,2,2,2,3,3,3であれば条件を満たす.1,1,2,2,3,3,4,5,61,1,1,1,2,2,2,2,2であれば条件を満たさない.

ヒント
 目iがちょうど3個出ているような事象をAiと置く.
 
解答
 目iがちょうど3個出ているような事象をAiと置く.
 P(Ai)=9C3(16)3(56)6P(AiAj)=9!3!3!3!(16)3(16)3(46)3P(AiAjAk)=9!3!3!3!(16)3(16)3(16)3であり,求めるべき値は
6C1P(Ai)6C2P(AiAj)+6C3P(AiAjAk)=9!69(3!)3(6120561543+20)=9!61274952=262325419904
 

 5×5のマス目があり,各マスには白石,黒石のいずれか1つが置かれている.次の条件を満たす石の置き方は何通りか.
(条件)どの行,どの列を見ても,黒石が1つ以上置かれている.(白石については,置かれていなくてもよい.)

ヒント1
 行と列,両方の条件があるから厄介である.片方の条件(例えば行の条件)は満たしているものとして,列の条件に対して包除原理を適用しよう.
 
ヒント2
 行の条件は満たしているものとして,i列目に黒石が置かれていないような石の置き方をAiとする.
 
解答
 行の条件は満たしているものとして,i列目に黒石が置かれていないような石の置き方をAiとする.
 |Ai|=155|AiAj|=75|AiAjAk|=35|AiAjAkAl|=15なので,包除原理より求めるべき値は3155×155+10×7510×35+5×15=24997921通り.
 

 最後にOMCの例題である.ここに挙げた他にもいくつかあるだろうから,見つけたら更新していく.

OMCの例題
OMC113(E)
OMC103(F)

投稿日:42
更新日:42
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

て
2
779

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. 本記事の前提知識
  2. 一般の包除原理
  3. 包除原理を用いた具体例