我试图通过编写测试Fermat最后定理的python应用程序来学习算法。它迭代a ^ n + b ^ n = c ^ n的所有组合,其中a / b在10000处达到上限而n在100处达到上限。我意识到我没有得到任何命中,但它'只是一点乐趣。无论如何,具体细节并不重要。
它归结为a + b,其中a和b迭代所有组合1到10000.但问题是:4 + 5与5 + 4完全相同所以我的程序正在做两次它需要做的工作。如何在跳过镜像输入的同时迭代这些组合?
base_ceiling = 10000 # max values for a and b
n_ceiling = 100 # max value for power of n
powers = []
for i in range(n_ceiling):
jarr = []
for j in range(base_ceiling):
jarr.append(j ** i)
powers.append(jarr)
for k in range(3, n_ceiling):
for i in range(1, base_ceiling):
for j in range(1, base_ceiling):
pow_vals = powers[k]
a = powers[k][i]
b = powers[k][j]
c = a + b
try:
idx = pow_vals.index(c)
if idx > -1:
print k, ": ", i, j, "=", idx, " results in ", a, b, "=", c
except ValueError:
continue
答案 0 :(得分:1)
就像使用for j in range(i, base_ceiling)
一样简单。这是有效的,因为它将从i
而不是1
开始,因此它不会重复低于i
的任何内容。您可以改为使用i + 1
,因为i^n + i^n
永远不会是n
的力量。