Given an integer, write a function to determine if it is a power of three.
Follow up:
Could you do it without using any loop / recursion?
//cmath里内置的有关指数与对数的函数 double exp(double x);// 求取自然数e的幂 double sqrt(double x); //开平方 double log(double x); //以e为底的对数 double log10(double x); //以10为底的对数 double pow(double x, double y); //计算以x为底数的y次幂
题解1:利用对数函数
class Solution { public: bool isPowerOfThree(int n) { return log10(n)/log10(3)-int(log10(n)/log10(3))==0; } };
题解2:发现这样一个简单的性质:一个数如果能整除一个比它大的3的幂数,那么这个数必然能被3整除。(因为它们分解质因数之后都是一堆3)。
这个性质可以把3推广到任何素数。
不是素数就不行了(因为分解质因数后不全是一个数了),比如6这个数:9能整除36,36是6的幂数,但是9不是6的幂数了。
class Solution { public: bool isPowerOfThree(int n) { int a=pow(3,19); return n>0 && (a%n==0); } };