例如,243 是 3 的完美幂,因为 243=3^5。
我以前一直在使用 (math.log(a)/math.log(b)).is_integer()
,我认为效果很好,但后来我用这个例子试了一下上面,由于浮点运算,它实际上返回 4.999999999999999。所以它只对非常小的数字可靠,我发现的数字不到 100。
我想我可以使用一个循环来重复乘法……即将 i 设置为 3,然后是 9,然后是 27,然后是 81,然后是 243,这等于目标,所以我们知道这是一个完美的幂。如果它达到大于 243 的点,那么我们就知道它不是完美的幂。但是我在一个循环中运行这个检查,所以这看起来效率很低。
那么有没有其他方法可以可靠地检查一个数字是否是另一个数字的完美幂?
最佳答案
尝试:
b ** int(round(math.log(a, b))) == a
也就是说,只使用 log()
(注意有一个 2 参数形式!)来猜测整数次幂,然后验证“那行得通”。
请注意,math.log()
会返回一个合理的结果,即使对于太大而无法表示为 float 的整数参数也是如此。另请注意,Python 中的整数 **
是精确的,并且在内部使用高效算法(执行与指数中的位数成比例的乘法次数)。
这比重复除法简单明了,而且(通常)效率更高。
不过我会回答您提出的问题 ;-) 如果您还有其他问题,其他一些答案可能更合适。
关于python - 检查一个数字是否是另一个数字的完美幂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39281632/