python – 如何检查数字是否是基数b的幂?
发布时间:2020-12-20 12:21:53 所属栏目:Python 来源:网络整理
导读:在 python中,如何检查数字n是否是基数b的精确幂? 注意:它需要推广到任何作为参数给出的基数. 这是我得到的: 假设n和base是整数 0. import mathdef is_power(n,base): return math.log(n,base) == base**n 解决方法 首先,假设您有一个特定的对数运算符(许
在
python中,如何检查数字n是否是基数b的精确幂?
注意:它需要推广到任何作为参数给出的基数. 这是我得到的: 假设n和base是整数> 0. import math def is_power(n,base): return math.log(n,base) == base**n 解决方法
首先,假设您有一个特定的对数运算符(许多语言只提供基数10或基数e的对数),logab可以计算为logxb / logxa(其中x显然是您的语言提供的基数).
Python更好一点,因为它可以计算出任意基数的对数,而不需要上面那种棘手的相等. 所以,无论如何,您都可以通过某种方式获得特定基数的对数.从那里,如果基数a中的b的对数是整数(注1),则b是a的幂. 所以我从以下代码开始,现在增加了边缘案例检测: # Don't even think about using this for negative powers :-) def isPower (num,base): if base == 1 and num != 1: return False if base == 1 and num == 1: return True if base == 0 and num != 1: return False power = int (math.log (num,base) + 0.5) return base ** power == num 例如,请参阅以下完整程序,其中显示了此操作: import math def isPower (num,base) + 0.5) return base ** power == num print isPower (127,2) # false print isPower (128,2) # true print isPower (129,2) # false print print isPower (26,3) # false print isPower (27,3) # true print isPower (28,3) # false print isPower (3**10,3) # true print isPower (3**129,3) # true print print isPower (5,5) # true print isPower (1,1) # true print isPower (10,1) # false 如果您担心浮点运算,可以通过重复乘法来实现,但是您应该测试这种解决方案的性能,因为它在软件中可能比在硬件中慢得多.对于像isPower(128,2)这样的事情来说,这无关紧要,但它可能成为isPower(verybignum,2)的关注点. 对于上述代码的非浮点变体: def isPower (num,base): if base == 1 and num != 1: return False if base == 1 and num == 1: return True if base == 0 and num != 1: return False testnum = base while testnum < num: testnum = testnum * base return testnum == num 但请确保它针对您的最大数量和最小基数进行测试,以确保您不会受到任何性能冲击. (注1)请记住,浮点不精确可能意味着它不是一个整数.您可能必须使用“足够接近”的比较. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |