如何编写满足要求的C程序

时间:2013-12-05 11:20:54

标签: c algorithm

今天我遇到了一个问题。它说:

  

你需要找出一个数字是否可以表示为两个完美幂的总和。也就是说,给定x,发现是否存在非负整数a,b,m,n,使得a ^ m + b ^ n = x,其中1 <= x <= 1000000且m> 1。 1,n> 1

有人可以解释一下如何做到这一点吗?

我知道我们可以这样写:

for(int a = 1; true; a++){
    for(int b = 1; true; b++){
        // And so on and so forth
    }
}

但这不是非常有效(或正确)的方式。

感谢。

1 个答案:

答案 0 :(得分:0)

有时候,这是解决这类问题的唯一方法。你发布的那个属于一类被称为“单向函数”的问题:在某种程度上有一个简单的问题实现......

给出四个非负整数,a, b, m and n, find x so a^m + b^n = x

但另一种方式......

给定x,找到四个非负整数a, b, m and n, so a^m + b^n = x

非常重要。事实上,解决它可能是不可能的,或者你最好的机会,必须使用强制暴力算法来解决它,这就是你提出的建议。