Python3 コード
sets_cap_cup_complement4.py
#!/usr/bin/env python3 """(docstring) """ import functools import numpy as np def print_math_problem(): """(docstring) """ print("""1 から 600 までの整数の中で、2 の倍数の集合を A, 3 の倍数の集合を B, 5 の倍数の集合を C とする。 このとき、以下のものを求めよ。 (1). 集合 A の要素の個数 n(A) (2). 集合 B の要素の個数 n(B) (3). 集合 C の要素の個数 n(C) (4). 集合 A cap B の要素の個数 n(A cap B) (5). 集合 B cap C の要素の個数 n(B cap C) (6). 集合 C cap A の要素の個数 n(C cap A) (7). 集合 A cap B cap C の要素の個数 n(A cap B cap C) (8). 集合 A cup B cup C の要素の個数 n(A cup B cup C) (9). 集合 (A cap B) cup C の要素の個数 n((A cap B) cup C) (10) 集合 A cap (B cup C) の要素の個数 n(A cap (B cup C)) """) def s_c_c_c4(): """(docstring) """ # 全体集合を U として作成しておく。 U = list(range(1, 601)) # 集合 A A = [i for i in U if i%2 == 0] print('(1): n(A) = {0} (個)'.format(len(A))) # 集合 B B = [j for j in U if j%3 == 0] print('(2): n(B) = {0} (個)'.format(len(B))) # 集合 C C = [k for k in U if k%5 == 0] print('(3): n(C) = {0} (個)'.format(len(C))) # 集合 A cap B A_cap_B = np.intersect1d(A, B) print('(4): n(A cap B) = {0} (個)'.format(len(A_cap_B))) # or # 集合 A cap B は 6 の倍数なのでリスト内包表記で以下のように書くこともできる。 # A_cap_B = [l for l in U if l%6 == 0] # or # A_cap_B = [l for l in U if l%2 == 0 and l%3 == 0] # # 以下の集合でも同様に倍数で求めることができるが、Numpy の関数を使用していく。 # 集合 B cap C B_cap_C = np.intersect1d(B, C) print('(5): n(B cap C) = {0} (個)'.format(len(B_cap_C))) # 集合 C cap A C_cap_A = np.intersect1d(C, A) print('(6): n(C cap A) = {0} (個)'.format(len(C_cap_A))) # 集合 A cap B cap C # intersect1d() は基本的に2引数しか取れないので、functools.reduce() で畳み込む。 A_cap_B_cap_C = functools.reduce(np.intersect1d, [A, B, C]) print('(7): n(A cap B cap C) = {0} (個)'.format(len(A_cap_B_cap_C))) # 集合 A cup B cup C A_cup_B_cup_C = functools.reduce(np.union1d, [A, B, C]) print('(8): n(A cup B cup C) = {0} (個)'.format(len(A_cup_B_cup_C))) # 集合 (A cap B) cup C print('(9): n((A cap B) cup C) = {0} (個)'.format(len(np.union1d(A_cap_B, C)))) # 集合 A cap (B cup C) B_cup_C = np.union1d(B, C) print('(10): n(A cap (B cup C)) = {0} (個)'.format(len(np.intersect1d(A, B_cup_C)))) if __name__ == '__main__': print_math_problem() print('-'*79) s_c_c_c4()
出力
$ python3 sets_cap_cup_complement4.py 1 から 600 までの整数の中で、2 の倍数の集合を A, 3 の倍数の集合を B, 5 の倍数の集合を C とする。 このとき、以下のものを求めよ。 (1). 集合 A の要素の個数 n(A) (2). 集合 B の要素の個数 n(B) (3). 集合 C の要素の個数 n(C) (4). 集合 A cap B の要素の個数 n(A cap B) (5). 集合 B cap C の要素の個数 n(B cap C) (6). 集合 C cap A の要素の個数 n(C cap A) (7). 集合 A cap B cap C の要素の個数 n(A cap B cap C) (8). 集合 A cup B cup C の要素の個数 n(A cup B cup C) (9). 集合 (A cap B) cup C の要素の個数 n((A cap B) cup C) (10) 集合 A cap (B cup C) の要素の個数 n(A cap (B cup C)) ------------------------------------------------------------------------------- (1): n(A) = 300 (個) (2): n(B) = 200 (個) (3): n(C) = 120 (個) (4): n(A cap B) = 100 (個) (5): n(B cap C) = 40 (個) (6): n(C cap A) = 60 (個) (7): n(A cap B cap C) = 20 (個) (8): n(A cup B cup C) = 440 (個) (9): n((A cap B) cup C) = 200 (個) (10): n(A cap (B cup C)) = 140 (個)
参考文献 (数式を参考)
坂田アキラの 場合の数・確率・データの分析が面白いほどわかる本 (坂田アキラの理系シリーズ)
- 作者: 坂田アキラ
- 出版社/メーカー: KADOKAWA
- 発売日: 2017/01/13
- メディア: 単行本
- この商品を含むブログを見る