出處
3的幂
分析
找規律來解題,盡量不要有循環這類想法。參考: 如何快速判斷一個數是不是2的幂、3的幂、4的幂 的思路。
- 2的次幂: 二進制位隻有一個1: 00000…..100000,減1後為 000000…..0111111。兩者相與則為0。是以 n & (n-1) == 0 即可。
- 4的次幂:4^n = (2^2)^n,1僅在偶數進制位上,那與僅在奇數位上的二進制數與操作為0 即可。是以: n & (n-1) == 0 && n & 0x55555555 == 0。 其中 0x55555555 是十六進制數,轉為二進制數則是奇數位為1的二進制數。(1431655765 = 0x55555555 = 1010101010101010101010101010101)
- 3的次幂:我們首先分析3的幂的特點,假設一個數Num是3的幂,那麼所有Num的約數都是3的幂,如果一個數n小于Num且是3的幂,那麼這個數n一定是Num的約數。即:3^Nmax % 3^num == 0。是以,是以算出3^Nmax即可。
代碼
public class IsPowerOfThree {
public boolean isPowerOfThree(int n) {
int maxPower = (int) Math.pow(,
(int)(Math.log()/Math.log()));
return maxPower % n == ;
}
}