现在我用以下方法计算(原始)勾股数
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)小于等于限制),但我担心这样会得到重复项。
任何建议将不胜感激。