mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - 素因数分解!

[ プログラミング, 数学 ] [ Ruby ]

こんばんは。

昨日は、任意の自然数を素因数分解する C++ によるアルゴリズムを紹介しました。

今日は、同じアルゴリズムを Ruby で実現してみました。 アルゴリズムについては、昨日の記事を参照してください。

実際、ほとんど同じです。

以下、Ruby によるサンプルスクリプトです。

記録

0. 前提条件

  • Cygwin 1.7.15
  • Ruby 1.9.3-p194

1. Ruby スクリプト作成

今回作成した Ruby ソースは以下の通りです。 【 ファイル名: prime_decomposition.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
46
47
48
49
# -*- coding: utf-8 -*-
#=======================================
# 素因数分解
#=======================================
class PrimeDecomposition
  # 計算クラス
  class Calc
    # 素因数分解
    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

  # メイン処理
  begin
    # 計算クラスインスタンス化
    obj_calc = Calc.new

    while true
      # データ入力
      print "自然数 ( 0 : 終了 ):"
      int_num = gets.chomp.to_i
      break if int_num < 1

      # 素因数分解
      obj_calc.decomposit_prime(int_num)
    end
  rescue => e
    # エラーメッセージ
    puts "[例外発生] #{e}"
  end
end

2. 実行

実際に実行して素因数分解するする。

1
2
3
4
5
6
7
$ ruby prime_decomposition.rb
自然数 ( 0 : 終了 ):4
2 * 2
自然数 ( 0 : 終了 ):7
7
自然数 ( 0 : 終了 ):1200
2 * 2 * 2 * 2 * 3 * 5 * 5

アルゴリズムは昨日の C++ と同じなので、ロジックも同じようになっています。 やった事はなるべく記録しておきたい性格なので。。。

以上。

Comments