はじめに
今回はマルチスケールシミュレーション特論という大学院の授業で ruby を使った課題があったのでプログラムを作成してみた
- 課題{e(自然対数の底)の値で連続する 10 桁の数のうち,最初の素数}を求めよ
手法
e は以下のように定義されている
e = 2.71828182845904523536028747135266249775
7247093699959574966967627724076630353547
5945713821785251664274274663919320030599
2181741359662904357290033429526059563073
81323286279434907632338298807531952510190
以下のような 手順 で今回は進めていこうと思う
手順
- e.txt というテキストファイルに e の値を保存しておく
- e.txt から値を読み込む
- 2.7 の部分の "." を除去して 10 桁毎に値を区切る
- 区切った値が素数かを判定する
プログラム
1 #!/usr/bin/env ruby
2 require 'prime'
3
4 def divide_per_ten
5 f = File.open("e.txt")
6 s = f.read.delete(".")
7 start_index, goal_index = 0, 10
8 while true do
9 if prime_decision(s[start_index, goal_index].to_i) == true then
10 puts s[start_index, goal_index]
11 break
12 end
13 start_index = start_index + 1
14 end
15 end
16
17 def prime_decision(num)
18 return Prime.prime?(num)
19 end
20
21 divide_per_ten
各関数の説明
-
divide_per_ten 関数:ファイルから e の値を読み込み、10 桁毎に区切ってprime_decision 関数に渡す
-
prime_decision 関数:素数の判定を行って、true or false を返り値として渡す
GitHub
コードは以下の URL から閲覧できます
結果
実行すると以下のような答えがでてきます
7427466391
さいごに
是非、おもしろいなと思ったら LGTM してくれると今後の励みになるのでお願いします!!
(LGTM されると嬉しくて踊りだします)
- source ~/Downloads/git/enjoy_unix_lecture_materials/grad_members_20f/members/taiseiyo/memos/google.org