最初は「包除原理」です。
これは集合の和(union)を集合の積(intersection)を用いて表すものと言えます。
二つの重なりのある集合AとBの場合は、です。ただし集合を挟む縦棒は要素の数です。
例として、集合型の変数s2は2の倍数、s3は3の倍数とし、s2とs3の和集合の要素数を、直接求める場合と包除原理を用いた場合を出力します。
# 集合演算の例 s2 = {2,4,6,8,10} s3 = {3,6,9,12,15} s4 = s2 | s3 s5 = s2 & s3 print('s2:',s2) print('s3:',s3) print('s2|s3:',s4) print('s2&s3:',s5) print('Length of s2|s3=',len(s4)) print('Length of s2|s3(by inclusion-exclusion)=',len(s2)+len(s3)-len(s5))
結果は以下のようになります。
s2: {2, 4, 6, 8, 10} s3: {3, 6, 9, 12, 15} s2|s3: {2, 3, 4, 6, 8, 9, 10, 12, 15} s2&s3: {6} Length of s2|s3= 9 Length of s2|s3(by inclusion-exclusion)= 9