关于x的n次幂的各种问题,快速幂等

同学们不知道有没有遇过下面的常见系列问题

1 如何判断一个数是不是 x的n次幂。

2 如何快速计算一个数是不是x的n次幂。


1----怎么判断一个数是不是x的n次幂呢 ? 比如它传进来的是int类型的

最好的答案-------------若是这个数可以被int的最大的x的n次幂整除,那么他就是 ,否则不是  算法时间复杂度O(1)

比如   ------    如何判断一个数是不是3的 n次幂            你找到int的最大的3的n次幂数  然后做整除,若是整除则是。

当然 这里有一个特例,比如判断2的n次幂。 那么计算机底层就是2进制的。 

只要它二进制表示只有一个1,那么他就是二的 n次幂     如 10 2的1次方  100 2的2次方   1000 2的3次方等等

算法 : 输入的n   如果  if(n&n(n-1)==0)那么就成立了

比如拿16来说   二进制  1000  n-1为15  0111  然后位与  每个都是0 那么最后结果是0.


2怎么快速算出x的n次幂?

-------------答案更简单,更是大家平时都用过的。

比如让你手算  2的8次方,你怎么算。(当然是你没有背的情况 当然256非常好记)

我相信没人会拿 2*2*2*2.。。。。*2 乘以8 次吧。

大家肯定会在草稿纸算出  我拆成2的4次方 * 2的4次方  然后   在2的2次方乘以2的2次方

最后,你要算8次的运算  最后你算了几次?

数一数   2的2次方   --------一次

2的2次方*2的2次方----------两次

2的4次方*2的四次方---------三次

对,时间复杂度从O(n) 变为 O(logn) 确切的是log2n,二分

这就是快速幂   x的n次幂  转成   x的n/2次幂  在转成x的n/4   最后到x的1次幂

具体代码也很简单。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值