【发布时间】:2011-06-15 17:14:00
【问题描述】:
我有一个问题,让我们说: 找到所有两对数字 (x,y) 和 (z,t) 使得 x³ + y³ = z³ + t³,其中 (x, y) != (z, t) 和 x³ + y³ 。
以 10,000 的立方根 21.544 -> 向下取整到 21,所以我得到:
#include <iostream>
using namespace std;
int main() {
for( int x = 1; x <= 20; ++x ) {
for( int y = x + 1; y <= 21; ++y ) {
for( int z = x + 1; z <= y - 1; ++z ) {
for( int t = z; t <= y - 1; ++t ) {
if( x*x*x + y*y*y == z*z*z + t*t*t ) {
cout << x << ", " << y << ", " << z << ", " << t << endl;
}
}
}
}
}
return 0;
}
我知道这段代码可以进一步优化,而这正是我所寻找的。另外,我的一位朋友告诉我 y 可能是 x + 2 而不是 x + 1,我对此表示怀疑,因为 if
x = 1,那么我们将永远不会有 y = 2,在这种情况下,它错过了一个可能的解决方案。
有什么想法吗?
【问题讨论】:
-
不确定这是否有帮助:wolframalpha.com/input/?i=x^3+%2B+y^3+%3D+z^3+%2B+t^3%2C+x+%21%3D+z %2C+y+%21%3D+t
-
有关这方面的轶事,请参阅mathworld.wolfram.com/TaxicabNumber.html
-
你可能想看看euler.free.fr
-
为什么要优化它?您的确切代码在我的机器上运行时间为 0.003 秒。
标签: c++ algorithm numbers logic