leetcode 326 Power of Three(数论)

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);
    }
};

 

posted @ 2016-02-25 17:25  周洋  阅读(180)  评论(0编辑  收藏  举报