#01:最大公約数・最小公倍数とは
このチャプターでは、最大公約数・最小公倍数について学習します。
最小値や最大値は、if文を用いる他に、min,max関数を用いて求めることもできます。つまり、下のコード1
はコード2
で置き換えることができます。
【 コード1 】if x < minimum:
minimum = x
if x > maximum:
maximum = x
【 コード2 】minimum = min(x, minimum)
maximum = max(x, maximum)
最大公約数を求めるコード# 整数を受け取り、素因数分解をおこなって[素因数、個数]の連想配列(辞書)を返す関数
def factorize(n):
primes = {}
for i in range(2, n+1):
if n % i > 0:
continue
exp = 0
while n % i == 0:
exp += 1
n //= i
primes[i] = exp
if n != 1:
primes[n] = 1
return primes
def calc_gcd(a, b):
table_a = factorize(a)
table_b = factorize(b)
table_gcd = {}
for prime in table_a:
exp = table_a[prime]
if prime in table_b:
exp = min(exp, table_b[prime])
table_gcd[prime] = exp
gcd = 1
for factor in table_gcd:
exp = table_gcd[factor]
for _ in range(exp):
gcd *= factor
return gcd
a = 30
b = 12
gcd = calc_gcd(a, b)
print(f"{a} と {b} の最大公約数は {gcd}")
最小公倍数を求めるコード# 整数を受け取り、素因数分解をおこなって[素因数、個数]の連想配列(辞書)を返す関数
def factorize(n):
primes = {}
for i in range(2, n+1):
if n % i > 0:
continue
exp = 0
while n % i == 0:
exp += 1
n //= i
primes[i] = exp
if n != 1:
primes[n] = 1
return primes
def calc_lcm(a, b):
table_a = factorize(a)
table_b = factorize(b)
table_lcm = {key: val for key, val in table_a.items()}
for prime in table_b:
exp = table_b[prime]
if prime in table_a:
exp = max(exp, table_a[prime])
table_lcm[prime] = exp
lcm = 1
for factor in table_lcm:
exp = table_lcm[factor]
for _ in range(exp):
lcm *= factor
return lcm
a = 30
b = 12
gcd = calc_lcm(a, b)
print(f"{a} と {b} の最小公倍数は {gcd}")