对于整数 x、y 和 n,(仅给出 x 和 y)测试 x n = y?如果 x = 8,y = 512,则 n = 3,所以这是真的。但如果 x = 8 和 y = 500,n 必须在 2.98 左右(不是整数),因此该语句评估为假。使用对数是进行此测试的最佳方法吗?
检查一个整数是否是另一个整数的整数幂提供了一些解决方案:
int n = y; while(n < x) n *= y; return n == x
,
while (x%y == 0) x = x / y
return x == 1
和对数方法(这是我的版本):
return ((log(y, x) % 1) == 0) // log(expression, base)
日志(y, x) = 日志x y
哪种方法计算速度更快,尤其是对于大数字?