一、问题描述
二、思路
方法一是对数的换底公式。高中学过的换底公式为logab = logcb / logca,那么如果n是3的倍数,则log3n一定是整数,我们利用换底公式可以写为log3n = log10n / log103,注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错,不能使用的原因在讨论区:原因
方法二1162261467 is 3 ^19,这个方法只有一行代码啊啊,记不住数字可以直接写3 ^19。
三、代码
方法一:
class Solution {
public:
bool isPowerOfThree(int n) {
if(n <= 0) return false;
int max_pow3 = log10(INT_MAX)/log10(3); // simple math formula to compute log_3(N)
int max_pow3_val = pow(3, max_pow3);
return max_pow3_val % n == 0;
}
};
方法二:
class Solution {
public:
bool isPowerOfThree(int n) {
return n>0 && 1162261467 % n == 0;
}
};