素因数分解アルゴリズム(Ruby)

プログラミング

はじめに

入力した数字を素因数分解するアルゴリズムを作成します。

10秒で登録完了!TECH::CAMPオンライン説明会

現役エンジニアのメンターから学べるオンラインブートキャンプ

実行

数字を入力する

入力するためのコードは次のようにします。

puts "数字を入力してください"
x = gets.chomp.to_i

素因数分解の為に、別途数字を用意し、その数字で割り切れるかどうかを判別していきます。
割り切れる場合は1をプラスして、次の数字で判別します。

a = 2
puts "数字を入力してください"
x = gets.chomp.to_i

条件式を用意

ここでは、判定用の数字をaにします。
割り切れるかどうかの判定は次のようにします。

if x % a == 0
end

これで、xがaで割り切れるかどうかが判定できます。
今回は、配列を使用して最後に約数を表示させたいので、割り切れた場合は事前に用意していた配列に追加していきます。

配列を用意

answer = []
if x % a == 0
  answer << a
end

今のままだと、同じ約数がひたすら追加されるだけなので、
割り切れたら元の数字を割る、割り切れなかったら次の数字で試す、
という操作を入れます。

条件によって処理を変える

if x % a == 0
  answer << a
  x = x / a
else
  a += 1
end

これを元の数字が1になるまで続けます。

while x > 1
  if x % a == 0
    answer << a
    x = x / a
  else
    a += 1
  end
end

結果を表示する

最後にpメソッドを使って表示させます(putsメソッドだと、改行されて結果が見にくくなることがあるので)

p answer

完成図

最終的なコードは次のようになります。

a      = 2
puts "数字を入力してください"
x      = gets.chomp.to_i
answer = []

while x > 1
  if x % a == 0
    answer << a
    x = x / a
  else
    a += 1
  end
end

p answer

試しに出力して、775249と入力すると、[61,71,179]と出力されます。
色々改良可能なコードなので、色々試そうと思います。

コメント

タイトルとURLをコピーしました