Ruby - 素因数分解!
Updated:
昨日は、任意の自然数を素因数分解する C++ によるアルゴリズムを紹介しました。
今日は、同じアルゴリズムを Ruby で実現してみました。
アルゴリズムについては、昨日の記事を参照してください。
実際、ほとんど同じです。
以下、Ruby によるサンプルスクリプトです。
0. 前提条件
- Cygwin 1.7.15
- Ruby 1.9.3-p194
1. Ruby スクリプト作成
今回作成した Ruby ソースは以下の通りです。
File: prime_factorization.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#! /usr/local/bin/ruby
#=======================================
# 素因数分解
#=======================================
class PrimeFactorization
# 素因数分解
def decomposit_prime(n)
# 割る数の初期値
a = 2
# √n ≧ a ( n ≧ a * a ) の間ループ処理
while n >= a * a
# a で割り切れたら、a は素因数
# そして、割られる数を a で割る
# a で割り切れなかったら a を 1 増加させる
if n % a == 0
print "#{a} * "
n /= a
else
a += 1
end
end
# 最後に残った n は素因数
puts n
end
end
if __FILE__ == $0
begin
# 計算クラスインスタンス化
obj = PrimeFactorization.new
while true
# データ入力
print "自然数 ( 0 : 終了 ):"
int_num = gets.chomp.to_i
break if int_num < 1
# 素因数分解
obj.decomposit_prime(int_num)
end
rescue => e
puts "[例外発生] #{e}"
end
end
2. 実行
まず、実行権限を付与。
$ chmod +x prime_factorization.rb
そして、実行。
$ ./prime_factorization.rb
自然数 ( 0 : 終了 ):4
2 * 2
自然数 ( 0 : 終了 ):7
7
自然数 ( 0 : 終了 ):1200
2 * 2 * 2 * 2 * 3 * 5 * 5
アルゴリズムは昨日の C++ と同じなので、ロジックも同じようになっています。
やった事はなるべく記録しておきたい性格なので。。。
以上。
Comments