原始ピタゴラス数の和(1)
1≦x<y<z≦100なる原始ピタゴラス数について、
その和を求めてみる。
①Ruby学びはじめだった140315(2)分のコードに手を加えて求めてみた。
(本当に酷いコードです…。)
出力結果
3 + 4 + 5 = 12
5 + 12 + 13 = 30
7 + 24 + 25 = 56
8 + 15 + 17 = 40
9 + 40 + 41 = 90
11 + 60 + 61 = 132
12 + 35 + 37 = 84
13 + 84 + 85 = 182
16 + 63 + 65 = 144
20 + 21 + 29 = 70
28 + 45 + 53 = 126
33 + 56 + 65 = 154
36 + 77 + 85 = 198
39 + 80 + 89 = 208
48 + 55 + 73 = 176
65 + 72 + 97 = 234
1936
②「ツイン・トライアングル」問題で紹介されていた
「Tree of primitive Pythagorean triples」を用いて求めてみた。
class Array
def gcd
self.inject{|a, b| a.gcd(b)}
end
end
s = 0
for x in 1..98
for y in x..99
z = Math.sqrt(x**2+y**2)
if z == z.to_i && z < 101 then
z = z.to_i
if [x, y, z].gcd == 1 then
s += x + y + z
puts "#{x} + #{y} + #{z} = #{x + y + z}"
end
end
end
end
p s
出力結果
3 + 4 + 5 = 12
5 + 12 + 13 = 30
7 + 24 + 25 = 56
8 + 15 + 17 = 40
9 + 40 + 41 = 90
11 + 60 + 61 = 132
12 + 35 + 37 = 84
13 + 84 + 85 = 182
16 + 63 + 65 = 144
20 + 21 + 29 = 70
28 + 45 + 53 = 126
33 + 56 + 65 = 154
36 + 77 + 85 = 198
39 + 80 + 89 = 208
48 + 55 + 73 = 176
65 + 72 + 97 = 234
1936
②「ツイン・トライアングル」問題で紹介されていた
「Tree of primitive Pythagorean triples」を用いて求めてみた。
def f(a, b, c, n)
return 0 if c > n
s = a + b + c
s += f( a - 2 * b + 2 * c, 2 * a - b + 2 * c, 2 * a - 2 * b + 3 * c, n)
s += f( a + 2 * b + 2 * c, 2 * a + b + 2 * c, 2 * a + 2 * b + 3 * c, n)
s += f(-a + 2 * b + 2 * c, -2 * a + b + 2 * c, -2 * a + 2 * b + 3 * c, n)
return s
end
p f(3, 4, 5, 10 ** 2)
出力結果
1936
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。