Ruby
原始ピタゴラス数の思い出
小学生の頃
算数や図工の時間になんとなく使用していたが、証明には至らず。
中学生の頃
ぶっ飛んだ授業(数学)で一般的に
{x,y}={2ab,a^2-b^2},z=a^2+b^2
と表されることを習う。
思い出はこれくらいにして、
1≦x<y<z≦100なる原始ピタゴラス数を求めてみる。
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.gcd(y) == 1 && y.gcd(z) == 1 && z.gcd(x) == 1 then
puts "#{x},#{y},#{z}"
end
end
end
end
互いに素の部分がカッコ悪いので、injectメソッドを使うと、
class Array
def gcd
self.inject{|a, b| a.gcd(b)}
end
end
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
puts "#{x},#{y},#{z}"
end
end
end
end
となりスッキリする。
出力結果
3,4,5
5,12,13
7,24,25
8,15,17
9,40,41
11,60,61
12,35,37
13,84,85
16,63,65
20,21,29
28,45,53
33,56,65
36,77,85
39,80,89
48,55,73
65,72,97
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。