我刚刚开始使用Python编写课程并尝试此代码:
import math
c = int(input('Enter number: '))
a = 1
counter = 0
while counter != 2:
a = a + 1
b = round((c-(a**3))**(1/3.0))
if a < b and a**3 + b**3 == c:
counter = counter + 1
print(a,b)
我的问题是蟒蛇不能绕过&#39; b&#39;因为它被视为一个复数...
该程序应该找到两组a&amp; b满足^ 3 + b ^ 3 = c,我的代码上的任何反馈都是值得赞赏的。
答案 0 :(得分:0)
基本上,将负数提高到分数幂会产生复数。例如,sqrt(-1)(即(-1)**(1/2))显然很复杂。
所以,如果你试图将-8提高到1/3的幂,你就会得到一个复数。例如:
a = (-8)**(1/3)
print(a)
print(a**3)
将打印
(1.0000000000000002+1.7320508075688772j)
(-8+3.1086244689504383e-15j)
当提升到3级时,它会给予-8,给予或采取一些舍入。
这种四舍五入是真正的问题。你可以说-8到1/3的功率是-2,因为-2到3的功率是-8。然而 - 这就是关键 - 只有在功率实际为1/3时才有效。在浮点数中,它实际上将是0.33333(有更多三分之一),这不完全相同。因此,取幂是用复数来完成的。
你要么必须使用复数,要么重写你的数学不使用负数的分数幂。
答案 1 :(得分:-2)
你需要保护你的计算,使^ 3大于c;这就是返回复数的原因。也许
while counter != 2 and c >= a**3:
另外,为什么还要等待两个解决方案? “反击”让我感到困惑......如果你只需要一个解决方案,你可以使用布尔标志。