所以我尝试创建一个程序来生成大于整数n的最小立方体
def first_cube_above(n):
#Return the smallest cube which exceeds the non-negative integer n.
num = 1
total = 0
while total != 1:
if pow(int(pow(n+num, 1/3)), 3) == n + num:
total = 1
else:
num += 1
print(n + num)
这似乎对小整数有效,但我不明白为什么is不适用于其他整数。任何帮助都将不胜感激。在
您的probem有浮点舍入错误。与浮点的相等比较^{cd1>}不准确。最好使用精确的算术。
最简单的解决方案是从1开始迭代,并在第一个大于n的多维数据集上停止:
然而,由于需要迭代O(n^(1/3))个数,所以这个解决方案是非常不重要的。但是我们知道,我们不需要迭代非常低的数字,所以让我们从一些数字开始,它一定比根值低,但不太多:
^{pr2}$这个函数也能处理大量的数据。例如:^{cd2>}打印^{cd3>}这是^{{cd4>}的立方体
作为@马丁麦可指出,你(错误地)假设
pow(pow(x, 1/3), 3) == x
。由于浮点错误,这不成立。事实上,快速检查我们会发现(很可能)只有少数整数符合上述条件:在我的机器上,
^{pr2}$good
数字是和
good_cubes
是您可以看到列表中最大的完美立方体是}是来自
27
,因此出现了错误。您可以尝试按如下方式计算下一个最大的立方体:next_cube = ceil(x**(1/3))**3
其中{math
模块的函数。在相关问题 更多 >
编程相关推荐