def isAbundant(testNum):
total = 1
divisor = 2
while divisor < (testNum/2 + 1):
if(testNum%divisor == 0):
total = total + divisor
divisor = divisor + 1
if total > testNum:
result = True
else:
result = False
return result
#create a list of abundant numbers
i = 12
listOfAbunNo = []
sums = []
while i < 28112:
if isAbundant(i) == True:
listOfAbunNo.append(i)
i = i+1
print(i)
# create list of sums of Abundant numbers
i = 0
print(len(listOfAbunNo))
while i < len(listOfAbunNo):
j = i # i and j are abundant numbers (indexes) to sum
while j <len(listOfAbunNo):
sums.append(listOfAbunNo[i]+listOfAbunNo[j])
j=j+1
i = i+1
#remove duplicates
sums.sort()
i = 1
while i<len(sums):
if (sums[i-1] == sums[i]):
sums.remove(sums[i-1])
else:
i = i + 1
#calc total
print(str(sum[12,28111] - sum(sums)))
这是我的问题代码https://projecteuler.net/problem=23,对吗?如何优化它?你知道吗
问题 一个完全数是一个数,它的固有因子之和正好等于这个数。例如,28的真因子之和是1+2+4+7+14=28,这意味着28是一个完美的数字。你知道吗
如果一个数n的真因子之和小于n,则称为亏数;如果这个数n的真因子之和大于n,则称为丰数
因为12是最小的富足数,1+2+3+4+6=16,所以可以写成两个富足数之和的最小数是24。通过数学分析可以看出,所有大于28123的整数都可以写成两个富足数的和。然而,即使已知不能表示为两个充裕数之和的最大数小于这个极限,通过分析也不能进一步降低这个上限。你知道吗
求所有不能写成两个充裕数之和的正整数之和。你知道吗
是-除了最后一步,用
print(str(sum[12,28111] - sum(sums)))
计算总数不起作用:sums
包含所有的复合数,也包括那些高于28112的数字。试试print(max(sums))
,你就会得到56220
。所以你不能把所有的数字加起来,很多数字不应该计入总数。你知道吗sum[12, 28111]
不是有效的Python语法,请尝试sum(range(12, 28111))
您可以按以下步骤执行最后一步:生成一个包含所有非复合数字的列表,即要添加的数字,然后对这些数字求和:
删除重复项:您可以优化“删除重复项”部分:
可以写得更像python(更快)作为
它将使} ,删除它的所有重复项,然后使它再次成为一个列表。你知道吗
sums
成为^{禁用-函数:代替
你可以写
总和列表:这部分也可以从
至
所以你的整个代码现在看起来是这样的:
我添加了一个计时函数,代码在我的机器上大约40秒后返回正确的结果。你知道吗
相关问题 更多 >
编程相关推荐