今天我遇到了一个问题。它说:
你需要找出一个数字是否可以表示为两个完美幂的总和。也就是说,给定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
}
}
但这不是非常有效(或正确)的方式。
感谢。
答案 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
非常重要。事实上,解决它可能是不可能的,或者你最好的机会,必须使用强制暴力算法来解决它,这就是你提出的建议。