zoukankan      html  css  js  c++  java
  • 【kata Daily 190905】What's a Perfect Power anyway?(完美幂)

    原题:

    perfect power is a classification of positive integers:

    In mathematics, a perfect power is a positive integer that can be expressed as an integer power of another positive integer. More formally, n is a perfect power if there exist natural numbers m > 1, and k > 1 such that mk = n.

    Your task is to check wheter a given integer is a perfect power. If it is a perfect power, return a pair m and k with mk = n as a proof. Otherwise return NothingNilnullNULLNone or your language's equivalent.

    Note: For a perfect power, there might be several pairs. For example 81 = 3^4 = 9^2, so (3,4) and (9,2) are valid solutions. However, the tests take care of this, so if a number is a perfect power, return any pair that proves it.

    Examples

      isPP(4) => [2,2]

      isPP(9) => [3,2]

      isPP(5) => None

    -----------------------------------------------------------------------------------------------------------------------------------
    题目大意:给定一个数n,判断这个数是否是完美幂,即:有一个数m的k次数等于n。

    解题思路:

      我自己的解题思路很粗暴,但是并不能过审,这里也说一下我的思路

    def isPP(n):
        # your code here
        for i in range(n):
            for j in range(n):
                if i**j == n:
                    return [i, j]
        return None

    没错。。。很笨而且很好资源的办法,,,ヽ(ー_ー)ノ

      看一下其他网友的办法:

    def isPP(n):
        #your code here
        from math import sqrt
        m=int(sqrt(n))
        for i in range(2,m+1):
            k=0
            while i**k < n:
                k+=1
            if i**k==n:
                return [i,k]
        return None

    解读:先对n进行开根号,得到最大的m值,然后根据逐步逼近的办法来确定k的值。很好理解,是个好办法。

      看一下最多人推荐的:

    from math import ceil, log, sqrt
    
    def isPP(n):
        for b in xrange(2, int(sqrt(n)) + 1):
            e = int(round(log(n, b)))
            if b ** e == n:
                return [b, e]
        return None

    困惑:e 的根据是什么不太懂,,,

    知识点:

    1、数的幂次方运算,**两个星号表示幂运算:2**3=8

    2、数的对数运算,math.log(x[, base]):base默认为e

    3、数的开根号,math.sqrt(n)

    4、逐步逼近的算法,根据判断的结果取最后的值用于运算

  • 相关阅读:
    【整理】uclibc,eglibc,glibc之间的区别和联系
    C语言calloc()函数:分配内存空间并初始化——stm32中的应用
    收藏!了解UART总线工作原理看这一篇就够了!
    在stm32开发可以调用c标准库的排序和查找 qsort bsearch
    更少的直接百度,更多的取看API
    Sping中的IOC四种注解的简单记录
    使用for循环还是foreach循环?
    总是要还的
    EL表达式,保留小数点后两位
    如何遍历二叉树
  • 原文地址:https://www.cnblogs.com/bcaixl/p/11468113.html
Copyright © 2011-2022 走看看