« いまさら "FizzBuzz" | トップページ | Project Euler - Problem 11 »

2009年6月15日 (月)

Project Euler - Problem 10

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


この問題は、いかにして「200万以下の素数」を求めるかがポイントになります。

Ruby であれば、"prime.rb" を読み込んだ上で Prime.each(200_0000) ... とすることで簡単に求めることができます。

require 'prime' puts(Prime.each(200_0000).inject(:+))

Ruby 1.9 なら、約 4 秒で答が出ます。


ただ、「n 以下の素数を求める」といった限定的な条件なら、ここにも書きましたが自作の "math_tool.rb" に含まれている "prime_list" メソッドの方が高速です。

require 'math_tool' puts(prime_list(200_0000).reduce(:+))

こちらの場合、Ruby 1.9 なら約 1.5 秒くらいで答が出ます。


「楽しく、楽にプログラミングをする」というコンセプトの Ruby では、わざわざ新たにメソッドを作らずに添付ライブラリを使用するのが本来のやり方なのでしょう。

でも、この "prime_list" メソッドは、Chez Scheme で Project Euler を解いているときに必要に迫られて作った手続きを Ruby に移植したもので、それなりに思い入れがあるんです。

しかも、Project Euler のようにたくさんの計算をする必要がある場合、より速い方を使いたくなるのはしょうがないですよね。(たぶん、誰もかばってくれないだろうから、自己弁護……)

« いまさら "FizzBuzz" | トップページ | Project Euler - Problem 11 »

Project Euler」カテゴリの記事

Ruby」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック

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

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

« いまさら "FizzBuzz" | トップページ | Project Euler - Problem 11 »

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            
フォト

最近のトラックバック

無料ブログはココログ