从两个列表中添加值时的效率

时间:2017-09-22 16:22:48

标签: python algorithm

我试图通过编写测试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

1 个答案:

答案 0 :(得分:1)

就像使用for j in range(i, base_ceiling)一样简单。这是有效的,因为它将从i而不是1开始,因此它不会重复低于i的任何内容。您可以改为使用i + 1,因为i^n + i^n永远不会是n的力量。