擅长:python、mysql、java
<p>最重要的是,如果您想拥有这个限制,您需要将它编码到您的循环范围中。只需使用前一个循环的变量作为起始值,就可以得到所需的限制。你知道吗</p>
<pre><code>import numpy as np
lower = 20
upper = 201
b = np.arange(lower, upper)
a = b**5
for x in b:
for y in np.arange(x, upper):
for z in np.arange(y, upper):
for w in np.arange(z, upper):
lambdas=[x,y,z,w]
if sum(np.array(lambdas)**5) in a:
print((x,y,z,w))
</code></pre>
<p>输出:</p>
<pre><code>(27, 84, 110, 133)
</code></pre>
<p>我不知道你是怎么运行上一个循环来得到你发布的答案的。你知道吗</p>
<p>你为什么要用<code>numpy</code>作为你的控件?这似乎增加了一层只会减慢处理速度的软件。相反,只需将其编码为“普通”Python数学。另外,使用<code>set</code>检查总和,而不是列表。对集合进行散列也会加快您多次执行的一次检查。你知道吗</p>
<pre><code>lower = 20
upper = 201
b = range(lower, upper)
a = {i**5 for i in b}
for x in b:
for y in np.arange(x, upper):
for z in np.arange(y, upper):
for w in np.arange(z, upper):
if x**5 + y**5 + z**5 + w**5 in a:
print((x,y,z,w))
</code></pre>
<p>这得到了正确的答案,并在20秒内完成;您的原始版本(一旦我更正了缩进)花了3分钟。你知道吗</p>