« Project Euler - Problem 6 | トップページ | Project Euler - Problem 8 »

2009年6月11日 (木)

Project Euler - Problem 7

問題はこちらをご覧ください。


この問題は素数を数えていくだけですが、次のようにひとつひとつ素数判定をしていくと結構時間がかかります。(Ruby 1.9 で実行して 1 秒くらいです)

require 'math_tool'   i = 2 p = 3 # 3 は素数の 2 番目   while (i < 10001) do p = p + 2 # p : 奇数だけを調べていく。 i = i + 1 if p.prime? end   print("#{p}\n")

さりとて、上限が分からないので、自作の prime_list も使えないし……。


こういう時には、添付ライブラリの "prime.rb" に含まれる Prime class を使うと、速くてすっきりとした code がかけます。

require 'prime' puts(Prime.take(10001).last)

この code を Ruby 1.9 で実行すると約 0.2 秒で答が出ます。


この問題を解くためにいろいろ調べていて、初めて Enumerable#take と言うメソッドを知りました。いろいろと便利なメソッドが増えていくんですね。うれしい限りです。


"math_tool.rb" を最新版に更新しました。メソッドの改良、追加などを行っています。興味がある方はご覧ください。

« Project Euler - Problem 6 | トップページ | Project Euler - Problem 8 »

Project Euler」カテゴリの記事

Ruby」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/112020/45305934

この記事へのトラックバック一覧です: Project Euler - Problem 7:

« Project Euler - Problem 6 | トップページ | Project Euler - Problem 8 »

2016年7月
          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            
フォト

最近のトラックバック

無料ブログはココログ