查找3个功能的共同输出

时间:2018-12-22 11:57:48

标签: python

我有3个功能。这些是

A(n) = n(n+1)/2
B(n) = n(3n-1)/2
C(n) = n(2n-1)

它们的第一个共同输出和索引是:

A(285)=B(165)=C(143)=40755

我需要第二个,所以我尝试了这个:

 def equation1(x):
    return x*(x+1)/2

def equation2(x):
    return x*((3*x)-1)/2

def equation3(x):
    return x*((2*x)-1)

for i in range(144,30000):
    x = equation3(i)
    for a in range(i,2*i):
            y = equation2(a)
            if(x==y):
                for b in range(a,2*a):
                    z = equation1(b)
                    if(x==y==z):
                        print("Term =" + str(x))
                        print("A" + str(b))
                        print("B" + str(a))
                        print("C" + str(i))

但是找到它花了太多时间。如何以更简单的方式处理它?

1 个答案:

答案 0 :(得分:2)

由于所有三个函数的正值都在增加,因此您可以编写一个循环,在每次迭代时以最小的值增加数字:

a = b = c = 1
eq_a = equation1(a)
eq_b = equation2(b)
eq_c = equation3(c)

while True:
  if eq_a == eq_b and eq_b == eq_c:
    print("Found {}, {}, {}, result={}".format(a,b,c,eq_a))
  if eq_a <= eq_b and eq_a <= eq_c:
    a += 1
    eq_a = equation1(a)
  elif eq_b <= eq_a and eq_b <= eq_c:
    b += 1
    eq_b = equation2(b)
  elif eq_c <= eq_a and eq_c <= eq_b:
    c += 1
    eq_c = equation3(c)
  else:
    print("Should never be here")
    assert(False);

试运行:

Found 1, 1, 1, result=1
Found 285, 165, 143, result=40755
Found 55385, 31977, 27693, result=1533776805
Found 10744501, 6203341, 5372251, result=57722156241751