Python:确定数字是方形,立方体等的函数

时间:2017-07-27 15:56:05

标签: python algorithm function math division

我的一个简单问题是创建一个函数,确定某个给定的n是否可以将数字N写为a^n,即我需要检查N^(1/n)是否为整数。不知何故,这个函数会产生错误的结果:

def is_power(N, n):
    r = float(N) ** ( 1. / float(n) )
    return r.is_integer()

n=2可行。

对于n=3和N = 1,8,27,函数产生True,这是正确的。但从那时起,假,例如适用于4*4*4=645*5*5=125。如何创建一个找到正方形/立方体/等数字的工作函数?

1 个答案:

答案 0 :(得分:6)

浮点算术不准确 - 请参阅Is floating point math broken?

请使用精确整数数学检查您的答案。将r舍入到最接近的整数,然后查看电源是否有效。这个Python 3代码删除了一些冗余类型转换。对于Python 2,将r的计算包装成int()类型转换(Python 3不需要)。

def is_power(N, n):
    r = round(N ** (1.0 / n))
    return r**n == N