我正在努力优化我用来计算 10000 以下友好对的总和的这些函数。 amicable pair 是一对 (a, b),其中“a”的除数之和不包括“a”本身等于 b 和“b”的除数不包括“b”本身的总和等于“a”。
IE。 220 的因数是 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 和 110: 它们的和是 284. 和 284 (1, 2, 4, 71 and 142) 等于 220。
我的代码是:
import math
def Divisorsbaritself(x):
divList = [1]
y = 2
while y <= math.sqrt(x):
if x % y == 0:
divList.append(y)
divList.append(int(x / y))
y += 1
return sum(divList)
def amicable():
solution = []
for i in range(10000):
if Divisorsbaritself(Divisorsbaritself(i)) == i:
solution.append(i)
return sum(solution)
print amicable()
我需要帮助来理解为什么友好功能不起作用。对我来说,
if Divisorsbaritself(Divisorsbaritself(i)) == i:
条件是将 i
包含在列表中的正确条件是合乎逻辑的,但它给了我 40285,而不是 31626,答案。 最佳答案
如果 Divisorsbaritself(i)==i
你不应该算 i
。
def amicable():
solution = []
for i in range(10000):
if Divisorsbaritself(i)!=i and Divisorsbaritself(Divisorsbaritself(i)) == i:
solution.append(i)
return sum(solution)
但是你也应该修复如果 i 是一个完美的正方形并且是一个友好的一对,这将是一个问题。
您可以通过列表推导来改进这一点。
def amicable():
solution = [i for i in xrange(10000) if Divisorsbaritself(i)!=i and Divisorsbaritself(Divisorsbaritself(i)) == i]
return sum(solution)
关于python - 友好的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27517330/