特殊的勾股三胞胎

时间:2019-03-09 05:02:17

标签: for-loop pythagorean triplet

def pythagorean(n):
    aAndB = []
    for a in range(150, n-1):
        for b in range(150, n):
            for c in range(150,n+1):
                if (c * c) == a *a + b*b and a + b + c == 1000:
                    aAndB.append(a)
    return aAndB

print(pythagorean(500))

因此,我进行了此功能,以查找满足标准a + b + c = 1000的勾股三胞胎。当我运行它时,我得到[200,375]。问题是当我特别要求为a附加项目时,为什么在列表aAndB中会收到两个数字?

如果我使用aAndB.append(c)进行尝试,结果将显示[425,425]。如何解决它,只显示列表中的一个元素?

谢谢您的帮助!

2 个答案:

答案 0 :(得分:0)

这是因为有两个值可以满足您的条件:

if (c * c) == a *a + b*b and a + b + c == 1000:

您可以调试代码或仅在数组中添加更多信息,如下所示:

def pythagorean(n):
    aAndB = []
    for a in range(150, n-1):
        for b in range(150, n):
            for c in range(150,n+1):
                if (c * c) == a * a + b * b and a + b + c == 1000:
                    aAndB.append({'a': a, 'b': b, 'c': c})
    return aAndB

result = pythagorean(500)
for v in result:
    print(v)

因此,如果您只需要一个元素-从“结果”数组中选择哪个元素。 例如,如果您只想要第一:

first_element = None
if len(result) > 0:
    first_element = result[0]
    print('First element:', first_element)

答案 1 :(得分:-2)

您可以使用euclid的毕达哥拉斯三胞胎证明。您可以选择任意任意大于零的数字,例如m,n。根据欧几里德,三元组将是a(m∗m−n∗n),b(2∗m∗n),c(m∗m+n∗n)。现在应用此公式找出三元组,说我们的三元组的值是6,然后是另外两个。

a(m∗m−n∗n),b(2∗m∗n),c(m∗m+n∗n)

确定b(2∗m∗n)显然是偶数。所以现在

(2∗m∗n)=6 =>(m∗n)=3 =>m∗n=3∗1 =>m=3,n=1

除了3和1之外,您还可以采用其他任何值,但是这两个值应包含两个数字的乘积为3 (m∗n=3)

现在,当m等于3并且n等于1时,

a(m∗m−n∗n)=(3∗3−1∗1)=8 , c(m∗m−n∗n)=(3∗3+1∗1)=10

6,8,10是我们的价值三元组,这是我们如何生成三元组的可视化。

如果给定数字像(9)一样是奇数,则在此稍作修改,因为b(2∗m∗n)永远不会是奇数。所以,这里我们必须采取

a(m∗m−n∗n)=7 , (m+n)∗(m−n)=7∗1 , So,(m+n)=7,(m−n)=1

现在从这里找到mn,然后找到另外两个值。

按照此代码进行编码,它将高效地生成不同的三元组