Python 2.7 在代码中找不到毕达哥拉斯三元组-代码问题还是理论问题?

Python 2.7 在代码中找不到毕达哥拉斯三元组-代码问题还是理论问题?,python-2.7,Python 2.7,我正在研究欧拉计划的问题9,并且已经研究了一段时间了 这个问题说明: 毕达哥拉斯三元组是一组三个自然数,A

我正在研究欧拉计划的问题9,并且已经研究了一段时间了

这个问题说明:

毕达哥拉斯三元组是一组三个自然数,A a^2+b^2=c^2
例如,3^2+4^2=9+16=25=5^2

只有一个毕达哥拉斯三重态a+b+c=1000。
找到产品abc。”

我开发了一个代码,适用于给定的毕达哥拉斯三元组3、4和5的情况。然而,当扩展到试图找到整数a、b和c时,它没有得到任何结果,这让我认为我的方法一定缺少了一些毕达哥拉斯三元组。这是我的密码:

def square(list): #makes a function to square values in a list
    return [i**2 for i in list]

list = range(1,333)
list2 = square(list)

i = len(list2) -1    
while i != 1:
    j=0
    k=i
    while j != k:
        lhs = list2[j] + list2[k]
        rhs = list2[i]
        if lhs == rhs:
            #print i+1,j+1,k+1 - included to check the code was working for small values
            if i+1 + j+1 + k+1 == 1000:
                print (i+1)*(j+1)*(k+1)
            break
        if lhs < rhs:
            j += 1
        if lhs > rhs:    
            k -= 1
    i -= 1
def square(list):#生成一个函数,将列表中的值平方
返回[i**2代表列表中的i]
列表=范围(1333)
列表2=正方形(列表)
i=len(列表2)-1
而我1:
j=0
k=i
而j!=k:
lhs=list2[j]+list2[k]
rhs=list2[i]
如果lhs==rhs:
#打印i+1、j+1、k+1-包括以检查代码是否适用于小值
如果i+1+j+1+k+1==1000:
打印(i+1)*(j+1)*(k+1)
打破
如果左侧<右侧:
j+=1
如果左侧>右侧:
k-=1
i-=1

请让我知道,如果你认为是这样的情况下,如果我可以改善代码不知何故或如何我可以找到丢失的三重

如果您对效率不是特别感兴趣,那么您可以共同做这件事

import math

for a in range(1, 1000):
    for b in range(1, 1000):
        c = math.sqrt(a**2 + b**2)
        if a + b + c == 1000:
            print a * b * c

更优的解决方案:

for a in range(1, 1000 / 3 + 1):
    for b in range(a + 1, 1000 / 2 + 1):
        c = 1000 - a - b
        if a * a + b * b == c * c:
            print a * b * c
对范围的解释:

  • a
    ,因此
    a
    必须不大于1000/3
  • b
    ,因此
    b
    必须不大于1000/2
  • c
    is
    1000-a-b

我不太明白它是如何工作的,但它的运行速度是我的4.4倍。我欠你一票。你能解释一下你是如何决定范围值的吗?不客气。我已经更新了答案,解释了范围。@YewdentNiedtaknow很高兴能提供帮助。如果你认为这个答案是正确的,你能把它标记为接受吗?