现在我以这种方式计算(原始)毕达哥拉斯三元组
def generateTriples(limit):
for n in xrange(1, limit):
if (n**2 + (n+1)**2 > limit):
break
for m in xrange(n+1, limit, 2):
if (n**2 + m**2 > limit):
break
if (gcd(n, m) > 1):
continue
yield (m**2 - n**2, 2*m*n, m**2 + n**2)
但这所做的是输出所有腿都小于或等于限制的所有三元组。例如:
for triple in generateTriples(25):
print triple
'''
(3, 4, 5)
(15, 8, 17)
(5, 12, 13)
(7, 24, 25)
'''
但我想做的是改变它,这样我就只限制了腿。斜边可以任意大——我只希望 min(leg1, leg2) 小于或等于限制。
我还打算生成非原始对象,这意味着在所有项上按 k 缩放(也使得 min(leg1, leg2) <= 限制,但我担心我会以这种方式得到重复项。
任何建议将不胜感激。