問題
複数の数値の最小公倍数、最大公約数を求めるプログラムを作成しなさい。
条件:素数2と3までの最小公倍数、最大公約数を求められるロジックとする。
最小公倍数、最大公約数についてどう考えればいいかわからない方は少し考えて
ヒント1を見て、なるべくヒントは見ないで、自力で作成してください。
ヒント
法則を考える
ロジックを作る際に、数字の法則を知っておく必要があります。
今回は「割り算」と「最大公約数」の関係を知る必要があります。
2つの自然数 a, b について,a を b で割ったときの商を q,余りを r とすると
「a と b の最小公倍数」は,「b と r の最小公倍数」に等しい。
最小公倍数は「割った数字」全てと「商の答え」全てを掛けた数です。
2X2X3X1X2X3 = 72
最大公約数は「商の答え」全てを掛けた数です。
1X2X3 = 6
答え
答え
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 複数の数値ー>最小公倍数、最大公約数 # 素数まで def gcd(a, b): # 最大公約数を求める関数 while b > 0: a, b = b, a % b return a def lcm(l, m): # 最小公倍数を求める関数 return int(l * m / gcd(l, m)) def list_gcd(list): # 最大公約数 for _ in range(1, len(list)): # リストの数より1小さい番目で反復 arr = [] # 配列の中にある数字を比較して出た公約数を込むための配列を作る for i in range(1, len(list)): # 配列の中にある数字を一々比較するための反復門 arr.append(gcd(int(list[i-1]), int(list[i]))) # 比較した後出た公約数をarrに込む list = arr # また、リストの中にある数字たちの公約数を求めるためにリストをarrで変わる print(list[0]) # 最終でリストに残った数字が最大公約数 def list_lcm(list):# 最小公倍数 for _ in range(1, len(list)): # リストの数より1小さい番目で反復 arr = []# 配列の中にある数字を比較して出た公倍数を込むための配列を作る for n in range(1, len(list)): # 配列の中にある数字を一々比較するための反復門 arr.append(lcm(int(list[n-1]), int(list[n]))) # 比較した後出た公約数をarrに込む list = arr # また、リストの中にある数字たちの公倍数を求めるためにリストをarrで変わる print(list[0]) # 最終でリストに残った数字が最大公倍数 x = input("値を入力してください") list = x.split() list_gcd(list) list_lcm(list) |
コメント