同学们不知道有没有遇过下面的常见系列问题
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次幂
具体代码也很简单。