zoukankan      html  css  js  c++  java
  • 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);
        }
    };
  • 相关阅读:
    迷宫
    【NOIP2001普及组】最大公约数和最小公倍数问题
    latex online tool
    连续自然数和
    又是毕业季Ⅰ
    区间素数
    【AHOI2005】约数研究
    【NOIP2011提高组】计算系数
    【NOIP2012普及组】寻宝
    plsql 导出oracle数据库
  • 原文地址:https://www.cnblogs.com/zywscq/p/5217743.html
Copyright © 2011-2022 走看看