【发布时间】:2014-11-16 16:18:39
【问题描述】:
这里是问题的链接:link。我的代码似乎呈指数级下降,但我无法确定原因或更有效的算法。我的方法是通过从原始数字中减去每个数字并查看差异是否在丰富数字列表内来识别直到上限的所有丰富数字,并识别出不是数字总和的上限的数字。关于正在发生的事情和/或解决此问题的更好方法的任何想法?
这是我使用的代码:
import numpy as np
import math
import itertools
def divisors(n): return sorted(np.unique(np.array([[x,n/x] for x in range(1,int(round(math.sqrt(n))+1)) if n%x == 0]).flatten()).tolist())[0:-1]
ubound = 28123
abundant_numbers = [x for x in range(1,ubound) if x < sum(divisors(x))]
def is_sum_of_abundant(n):
isob = False
for i in abundant_numbers:
if (n - i) <=0:
continue
else:
if (n - i) in abundant_numbers:
isob = True
return isob
s = 0
for x in range(1,ubound):
print "%.2f percent\n" % ((float(x)/ubound)*100)
if is_sum_of_abundant(x):
print "{} is abundant".format(x)
else:
s+=x
print "{} is not abundant".format(x)
print s
【问题讨论】:
标签: python performance algorithm