import itertools
def gcd(x, y):
while y:
x,y = y,x%y
return x
def pytanum():
for a in itertools.count(2):
a2 = a*a
for b in xrange([1, 2][a%2], a, 2):
if gcd(a, b) == 1:
b2 = b*b
yield a2-b2, 2*a*b, a2+b2
確認
>>> g = pytanum()
>>> for i in range(10):
... p = g.next()
... print p, gcd(p[0], p[1]) == gcd(p[1], p[2]) == gcd(p[2], p[0]) == 1, p[0]**2+ p[1]**2 == p[2]**2
...
(3, 4, 5) True True
(5, 12, 13) True True
(15, 8, 17) True True
(7, 24, 25) True True
(21, 20, 29) True True
(9, 40, 41) True True
(35, 12, 37) True True
(11, 60, 61) True True
(45, 28, 53) True True
(33, 56, 65) True True