一尘不染

检查一个整数是否是另一个整数的幂

algorithm

这是一个采访问题:“给定2个整数x和y,检查x是否为y的整数次幂”(例如,对于x = 8和y =
2,答案为“真”,对于x = 10和y = 2 “假”)。

显而易见的解决方案是:

int n = y; while(n < x) n *= y; return n == x

现在我正在考虑如何改进它。

当然,我可以检查一些特殊情况:比如他们xy应该是奇数或偶数,也就是说,我们可以检查的至少显著位xy。但是我不知道我是否可以改善核心算法本身。


阅读 184

收藏
2020-07-28

共1个答案

一尘不染

您最好将y重复除以x。第一次获得非零余数时,您知道x不是y的整数次幂。

while (x%y == 0)  x = x / y
return x == 1

这将处理您在第一次迭代中的奇/偶数点。

2020-07-28