Open3
アルゴリズムの勉強のアウトプット
素因数分解
n = gets.to_i
ans = []
# 素因数分解の筆算を模している
(2..Math.sqrt(n)).each { |i|
while n % i == 0
n = n / i
ans << i
end
}
# 最後に出た商(素数)も忘れずにpush
ans << n if n >= 2
puts ans.sort.join(" ") #sortはしなくても可。
参考問題
最大公約数
# ユーグリッドの互除法を模した処理(余りを次の割る数として代入するループ)
def gcd(a,b)
a,b = b,a%b while b > 0
end
n = gets.to_i
ary = gets.split.map(&:to_i)
# 上記で作ったメソッドを元に、aryの配列の場合で演算
puts ary.inject(:gcd)
参考問題
解説
最小公倍数
def gcd(a,b)
a,b = b,a%b while b > 0
a
end
# ある数aとある数bの最小公倍数lを求めたい時
# 「l=a×b÷最大公約数」になる
def lcm(a,b)
a*b / gcd(a,b)
end
n = gets.to_i
ary = gets.split.map(&:to_i)
puts ary.inject(:lcm)
参考問題
解説)最小公倍数と最大公約数の関係について