326. 3的幂
给定一个整数,写一个函数来判断它是否是 3 的幂次方。
示例 1:
输入: 27
输出: true
示例 2:
输入: 0
输出: false
示例 3:
输入: 9
输出: true
示例 4:
输入: 45
输出: false
进阶:
你能不使用循环或者递归来完成本题吗?
求幂:递归
public class Solution {
public boolean isPowerOfThree(int n) {
if (n < 1) {
return false;
}
while (n % 3 == 0) {
n /= 3;
}
return n == 1;
}
}
变为3进制,只有一个1则为3的幂次方
public class Solution {
public boolean isPowerOfThree(int n) {
return Integer.toString(n, 3).matches("^10*$");
}
}
对数换底,为正数则为幂次方
class Solution {
public:
bool isPowerOfThree(int n) {
if(n<=0) return false;
return (log10(n)/log10(3)-int(log10(n)/log10(3)))<(1e-13);
}
};
质数特性
质数的幂次方因数只有自身;
所以找到int中3的最大整数,其能整除的则为质数;
public class Solution {
public boolean isPowerOfThree(int n) {
return n > 0 && 1162261467 % n == 0;
}
}