例如,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
Run Code Online (Sandbox Code Playgroud)
也就是说,仅使用log()(请注意有2个参数的形式!)来获得整数幂的猜测,然后验证“是否可行”。
请注意,math.log()即使对于太大而无法表示为浮点数的整数参数,也将返回明智的结果。还要注意,**Python 中的整数是精确的,并且在内部使用了高效的算法(进行与指数中位数成正比的乘法运算)。
这比重复划分更直接,更有效(通常)。
但是,然后我在回答您提出的问题;-)如果您有其他疑问,则其他一些答案可能更合适。
| 归档时间: |
|
| 查看次数: |
3699 次 |
| 最近记录: |