我想出的这个函数在什么范围内找到小于整数 n 的最大立方体有效?
def smaller_cube(n):
k = int(n**(1/3))
return k**3 if k**3 < n else (k-1)**3
64**(1/3) == 3.99999...
,但截断在这种情况下有效,如果是 4.00000...1
,它在 k-1
情况下仍然有效。
我认为,如果对于某些大立方体
c
,n > c**3
但由于精度错误而导致n**(1/3) < c
,那么可能会出错,因此会返回c-1
而不是c
。对于巨大的价值n**(1/3)
将完全关闭。
我也感兴趣是否将
int
替换为round
。数字的截断总是向下舍入,但四舍五入可以向上舍入到 0.5。
测试立方体和立方体+1发现这个最小的失败:
n = 84920 ** 3 + 1
print(n)
print(smaller_cube(n))
612392631488001
612370997523559