Python 2.7 在代码中找不到毕达哥拉斯三元组-代码问题还是理论问题?
我正在研究欧拉计划的问题9,并且已经研究了一段时间了 这个问题说明: 毕达哥拉斯三元组是一组三个自然数,A a^2+b^2=c^2Python 2.7 在代码中找不到毕达哥拉斯三元组-代码问题还是理论问题?,python-2.7,Python 2.7,我正在研究欧拉计划的问题9,并且已经研究了一段时间了 这个问题说明: 毕达哥拉斯三元组是一组三个自然数,A
例如,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
必须不大于1000/3a
,因此b
必须不大于1000/2b
isc
1000-a-b