如何优化以下功能?

时间:2019-12-05 02:21:38

标签: python python-3.x optimization

显然效率不是很高。我不知道如何检查效率,使用哪种工具或应用程序。我尝试的一件事是在list_squared中而不是在squares_and_pairs中导入数学模块,这样就不会多次导入数学模块。

该函数的目标:42的除数是:1,2,3,6,7,14,14,21,42。这些平方的平方是:1,4,9,9,36,49,196,441,1764 。除数平方的总和是2500,即50 * 50,即平方!

给出两个整数m,n(1 <= m <= n),我们想找到m和n之间的所有整数,它们的平方除数之和本身就是一个平方。 42就是这样一个数字。来自https://www.codewars.com/kata/integers-recreation-one

    import math
    final = []
    def squares_and_pairs(num):
        divisors = []
        for x in range(1, num + 1):
            if num % x == 0:
                divisors.append(x) #Adds all divisors of a number to a list
        sum = 0
        sq_pair = []
        for x in divisors:
            sum+= x**2 #Finds the sum of the squares of all divisors of a number
        if not math.sqrt(sum) % 1:
            sq_pair.append([num, sum]) #If the sum of the squares is a 
        return sq_pair #perfect square itself, return [num, sum]
    for x in range(m, n+1): #Returns all [num, sum] pairs in the range provided
        if squares_and_pairs(x):
            final += squares_and_pairs(x)
    return final

0 个答案:

没有答案