如何检查数字是否为5的幂?
我可以想到以下算法。有没有办法改善它?任何数学技巧?
答案 0 :(得分:9)
您不需要查看个别数字,您可以这样做:
n = (int)(log(x) / log(5)); // get n = log5(x), truncated to integer
if (pow(5, n) == x) // test to see whether x == 5^n
// x is a power of 5
答案 1 :(得分:4)
只有很少的五个幂适合int / long范围,所以你只需要生成所有这些并逐个检查(少于60个数字),使用HashSet将具有O(1)时间复杂度
答案 2 :(得分:2)
连续划分,直到你达到不分5的数字并检查结果是否等于1,不是解决方案。需要log_5(n)操作,所以它是O(lg n),这是非常好的时间。对于9094947017729282379150390625
,它只有40次操作!
答案 3 :(得分:-1)
我要做的是首先创建一个5的幂数组。您可以使用范围,然后说,对于范围中的每个值,将该值取为第五个幂,并推送新值进入阵列。
然后,您将找到n,您要查找的数字是否包含在数组中。