显然效率不是很高。我不知道如何检查效率,使用哪种工具或应用程序。我尝试的一件事是在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