Ruby で整数 a
と b
の最大公約数,最小公倍数を得るには,それぞれ Integer#gcd,Integer#lcm を用いて
# 最大公約数(GCD: Greatest Common Divisor)
a.gcd(b)
# 最小公倍数(LCM: Least Common Multiplier)
a.lcm(b)
のようにする。
たとえば,4 と 6 の最大公約数,最小公倍数は
puts 4.gcd(6) # => 2
puts 4.lcm(6) # => 12
といった具合。
では三つの整数 a
,b
,c
の最大公約数,最小公倍数は?
$a$,$b$,$c$ の最大公約数は,「$a$ と $b$ の最大公約数」と $c$ の最大公約数なので,
a.gcd(b).gcd(c)
で得られる。
最小公倍数も同様で,
a.lcm(b).lcm(c)
で得られる。
では,整数の組が配列で与えられていたら?
以下のように書けばよい。
numbers = [30, 20, 15]
# 最大公約数
puts numbers.inject(:gcd) # => 5
# 最小公倍数
puts numbers.inject(:lcm) # => 60
Enumerable#inject にはブロックを与えずにシンボルを与える用法があったよね。