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

2009年6月14日 (日)

Project Euler - Problem 9

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


"math_tool.rb" の一部として既にこのブログにも投稿していますが、「ピタゴラスの三つ組」を求める "pythagorean_triples" というメソッドを作りました。

def pythagorean_triples(n) return [] if n.odd? ans = Array.new 1.upto(n / 3) do |a| q, r = (n * n).divmod(2 * n - 2 * a) if r.zero? then b = n - q break if a > b ans.push([a, b, n - a - b]) end end return ans end

このメソッドは次のような考察を基に a, b を求めています。

a + b + c = n であれば、c = n - (a + b)
これを a² + b² = c² に代入すると……
b = (2 * a * n - n²) / (2 * a - 2 * n) = n - n² / (2 * n - 2 * a)

ということで、b が整数になるような a を探していくことで「ピタゴラスの三つ組」を求めています。


require 'math_tool' a, b, c = pythagorean_triples(1000)[0] puts(a * b * c)

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

Project Euler」カテゴリの記事

Ruby」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック

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

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

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

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

最近のトラックバック

無料ブログはココログ