假设给出了c。找到最多2个唯一解a,b,使得a ^ 3 + b ^ 3 = c ^ 3。
我的解决方案:
c=int(input("Choose c", ))
k=(c-1)**(1/3)
counter=0
a=1
while a<k:
a+=1
b=int((c-a**3)**(1/3))
if a**3+b**3==c and a>b:
counter+=1
print(a,b)
if counter==2:
break
print(a,b)
说明:
1:首先我们选择一个整数c。
2:k是上限a。
3:我想要一个计数器,这样我就可以得到两种不同的解决方案。
4:a应从1开始。
5:这是测试从1到k的每个整数。
6:当&#34;如果&#34;并不满意。
7:定义b。
8:这是我们要解决的等式。
9:所以如果公式得到解决,那么我们将1加到计数器上。
10:我们还打印a和b。
11-13:这是为了确保我们在获得第二个解决方案时停止。
问题!如果我输入c = 1729,它只返回(12,1)。为什么不继续寻找更多解决方案?
答案 0 :(得分:3)
另一个解决方案是(9,10)。问题是你的表达式用于计算b
:
b=int((c-a**3)**(1/3))
有舍入问题。尝试在Python中计算(1729-9**3)**(1/3.)
,您将获得9.999999999999998
。 int
的{{1}}代替9
。对此问题的快速解决方法是将计算偏移的数量非常小,例如
10
回复评论时:另外,您的上一个b=int((c-a**3)**(1/3)+1.e-10)
语句需要if
之前的print
行。