判断一个数m是不是数字k的n次方,O(1)时间
首先,通法为
// 其中N为int范围之中m次方的最大一个数
return m > 0 && N % m == 0;
当k为2或者4时,有特解,位运算。
为2时,只有一位是1。可以用
Integer.bitCount
或者
m & (m - 1) == 0
当为4时,除了一位是一以外,要保证这一位落在第0、2、4、6、8....位上,可用
m & 0x55555555
判断一个数m是不是数字k的n次方,O(1)时间
首先,通法为
// 其中N为int范围之中m次方的最大一个数
return m > 0 && N % m == 0;
当k为2或者4时,有特解,位运算。
为2时,只有一位是1。可以用
Integer.bitCount
或者
m & (m - 1) == 0
当为4时,除了一位是一以外,要保证这一位落在第0、2、4、6、8....位上,可用
m & 0x55555555