Power of Four
来源:互联网 发布:美丽港发型设计软件 编辑:程序博客网 时间:2024/05/01 15:03
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
Example:
Given num = 16, return true. Given num = 5, return false.
Follow up: Could you solve it without loops/recursion?
n&(n-1) 作用为去掉二进制n的最右边的1
1-1=0 0&1=0
10-1=01 01&10=00
11-1=10 10&11=10
对所有最低边位有1 的二进制,减去1为0. 最低位1&0=0;
对不是最低位有1 的二进制,减去1为 XXXX1000-> XXXX0111 两者相与 为 XXXX0000
当n&(n-1)为0 时, 代表去掉最右边的1 之后没有1了
意思是整个二进制只有一个1,则n为2的幂
2的幂一定不能被3整除
而4^k-1=(4^(k/2)-1)(4^(k/2)+1)
=(4^(k/4)-1)(4^(k/4)+1)(4^(k/4)+1)
=(4-1)(....)
所以4^k=3(...)+1
2的幂有2的奇数次幂和2的偶数次幂,2的偶数次幂就是4的幂
只要我们证明2的奇数次幂减去1不能被3整除就能判断
证明:2^(2k+1)-1 不能被3整除
http://blog.csdn.net/ChuQiDeCha/article/details/51255135 该博主已证明
所以该题答案为:
bool isPowerOfFour(int num) { return num > 0 && (num & (num - 1)) == 0 && (num - 1) % 3 == 0;}
0 0
- [LeetCode]Power of Four
- 342. Power of Four
- Power of Four-Leetcode
- LeetCode Power of Four
- LeetCode - Power of Four
- 113.Power of Four
- 342. Power of Four
- LeetCode342. Power of Four
- 342. Power of Four
- Power of Four
- leetcode_342 Power of Four
- LeetCode:Power of Four
- leetcode---Power of Four
- 342. Power of Four
- [LeetCode] Power of Four
- 342. Power of Four
- 342. Power of Four
- 【Leetcode】Power of Four
- gradle升级到2.3,出现的编译错误
- 机器学习笔记(七)Boost算法(GDBT,AdaBoost,XGBoost)原理及实践
- ubuntu 16.04 启用root用户方法(亲测可行)
- 13.Roman to Integer
- go语言比较常用的用法
- Power of Four
- mpu6050姿态解算与卡尔曼滤波(2)卡尔曼滤波
- 【OpenGL】GLUT函数说明
- c++实验2-分段函数求值
- UVA 10934 Dropping water balloons (动规)
- javaEE之SSH框架的底层机制及原理
- 提交github操作
- jwt(JSON Web Token) 让客户端安全的回传数据
- Linux常用命令介绍