我在做Euler项目的第9题时遇到了一个问题。我的程序正在走向长期运行。半个多小时。这是我的密码。在
def Problem9():
a = 1
b = 1
c = 1
x = []
while(a + b + c != 1000):
a = a + 1
for i in range(0,1000):
c = 1000 - (a + b)
if a < b < c:
if (a*a) + (b*b) == (c*c):
x.append(a*b*c)
print(a*b*c)
b = b + 1
print(x)
Problem9()
这基本上是为了找出所有的毕达哥拉斯三胞胎加起来是一千(链接到问题以便你能更好地理解它:https://projecteuler.net/problem=9)我的代码中有问题我可以修复还是我的代码根本上是错的?在
这会有用的
这个 算法绝对不适用于周长s>;1000000。 有一种更快的算法可以用来解决这个问题。您可以搜索
parametrisation of Pythagorean triplets
由于您知道这三个数字必须相加为
1000
,并且a < b < c
,因此您可以利用这一事实来更有效地(并且干净地)循环。在在这里,您将},你就可以在没有任何循环的情况下测试你的毕达哥拉斯条件。在
a
从1循环到1000。因为b必须大于a,所以从a循环到1000。然后,既然你知道了1000 = a + b + c
,那么{你掌握了系统
如果
^{pr2}$那么
但是,通过(*2),(a²+b²)=c²,然后
那么
现在,你有了新的系统:
另外,a、b和c是整数,
a<b<c
; 如果a>332
,a必须至少是333,然后, b应至少为334,然后,c应至少为335;333 + 334 + 335 = 1002
。在有了更多的数学知识,你可以做得更容易。在
结果:
在if语句中:
您可以使用:
但是,在这种情况下,只有整数才重要: 对于第一种方法,您可以绕过除法及其舍入问题。在
相关问题 更多 >
编程相关推荐