求解方程a + b + c + d = a * b * c * d

时间:2014-08-09 23:17:20

标签: algorithm math

您好我正在尝试为编程问题解决此等式,该问题表明您需要执行完整的搜索算法才能找到此结果。

然而,O(N ^ 4)算法需要花费大量时间,因为A,B,C和D的每个值的范围是(0,2000)。因此我们可以说A <= B&lt; =℃下= d

我想让我的算法更快地将其转换为O(n ^ 3)解决方案。为了做到这一点,我考虑了A,B和C的某些事情,使算法运行得更快(prunning)。但主要的问题是拿出D的搜索,我已经阅读了一些针对类似问题的解决方案以及他们找到的方式D从A + B + C = A * B * C推导它真的很混乱,有人可以解释一下我这个问题的O(N ^ 3)解决方案?非常感谢!

2 个答案:

答案 0 :(得分:5)

等式

A * B * C * D == A + B + C + D

只有一个解决方案

1 1 2 4

所以时间复杂度为O(1)


A <= B <= C <= D以来,

A + B + C + D <= 4 * D

因此

A * B * C * D <= 4 * D

A * B * C <= 4

因此,仅检查几种组合就足够了:

for(int a = 1; a <= 4; a++)
    for(int b = a; b <= 4; b++)
        for(int c = b; c <= 4; c++)
        {
            // a*b*c*d == a+b+c+d
            // => d == (a+b+c) / (a*b*c - 1)
            if(a * b * c - 1 != 0 && (a + b + c) % (a * b * c - 1) == 0)
            {
                int d = (a + b + c) / (a * b * c - 1);
                if (d >= c)
                    Console.WriteLine("{0} {1} {2} {3}",
                        a, b, c, (a + b + c) / (a * b * c - 1));
            }
        }

答案 1 :(得分:3)

等效地d =(a + b + c)/(abc-1)。现在只需遍历a,b和c的所有值,看看哪些值返回d的整数值。

此外a + b + c <当a,b,c> = 2时,abc-1应该缩短你的搜索时间......