Possible Duplicate:
Finding Hardy Ramanujan Numbers
我需要找到最小的自然数x
,其中
x = k^3 + l^3 = i^3 + j^3
和(k, l, i, j)
必须全部不同。
我尝试了以下四个for循环,但由于变量无限增加,我无法得到正确的解决方案...
for (int i=0;;i++)
for (int j=i+1;;j++)
for (int k=j+1;;k++)
for (int l=k+1;;i++)
compare(i,j,k,l);
您需要重新构建您对问题的思考方式。
它实际上是在说:可以用两种不同方式表示为两个立方体之和的最小自然数是多少?
问题陈述称该数字为 x,立方体对为 (i, j) 和 (k, l)。
以这种方式重申,它并没有那么糟糕。这是伪代码中的提示:
function count_num_cubic_pairs(n):
cubic_pairs = []
for i..n:
first_cube = i * i * i
remainder = n - first_cube
if remainder is a cube and (first_cube, remainder) not in cubic_pairs:
cubic_pairs.add((first_cube, remainder))
return length(cubic_pairs)
困难的部分是测试 remainder 是否是立方体
- 浮点错误会使事情复杂化很多。这是这个问题的真正核心 - 玩得开心。