创建一个返回超过非负整数n的最小立方体的程序

2024-10-01 22:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我尝试创建一个程序来生成大于整数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不适用于其他整数。任何帮助都将不胜感激。在


Tags: the程序whichreturndef整数numabove
2条回答

您的probem有浮点舍入错误。与浮点的相等比较^{cd1>}不准确。最好使用精确的算术。

最简单的解决方案是从1开始迭代,并在第一个大于n的多维数据集上停止:

a = 1
while a ** 3 <= n:
    a += 1
print(a ** 3)

然而,由于需要迭代O(n^(1/3))个数,所以这个解决方案是非常不重要的。但是我们知道,我们不需要迭代非常低的数字,所以让我们从一些数字开始,它一定比根值低,但不太多:

^{pr2}$

这个函数也能处理大量的数据。例如:^{cd2>}打印^{cd3>}这是^{{cd4>}的立方体

作为@马丁麦可指出,你(错误地)假设pow(pow(x, 1/3), 3) == x。由于浮点错误,这不成立。事实上,快速检查我们会发现(很可能)只有少数整数符合上述条件:

good = [x for x in range(10**7) if pow(pow(x, 1/3), 3) == x]
good_cubes = [x**3 for x in range(1000) if pow(pow(x**3, 1/3), 3) == x**3]
# len(good) = 50

在我的机器上,good数字是

^{pr2}$

good_cubes

0, 1, 8, 27

您可以看到列表中最大的完美立方体是27,因此出现了错误。您可以尝试按如下方式计算下一个最大的立方体: next_cube = ceil(x**(1/3))**3其中{}是来自math模块的函数。在

相关问题 更多 >

    热门问题