素因数分解するプログラム

n = gets.to_i
result = []
sqrt_n = Math.sqrt(n).to_i

(2..sqrt_n).each do |i|
  while n % i == 0
    n /= i
    result << i
  end
end

result << n if n >= 2
puts result.join(' ')

解説

以下の流れのようなアルゴリズムにすれば良い。

  • 1 ~ sqrt(N)まで調べる
  • Nを2で割れるだけ割る
  • Nを3で割れるだけ割る
  • sqrt(n)まで同様の操作を続ける
  • 最後に残ったNが2以上のとき、それを素因数に加える