为什么这个Sage程序不能正常工作(Project Euler 23)?

时间:2014-10-02 18:46:30

标签: python sage

这是我对Project Euler问题23的解决方案,即:

“完美数字是一个数字,其正确除数的总和恰好等于数字。例如,28的适当除数之和为1 + 2 + 4 + 7 + 14 = 28,这意味着28是一个完美的数字。

如果n的适当除数之和小于n,则n被称为不足,如果该和超过n则称为n。

由于12是最小的有限数,1 + 2 + 3 + 4 + 6 = 16,可以写成两个有限数之和的最小数是24.通过数学分析,可以看出所有大于28123的整数可以写成两个数字的总和。然而,即使知道不能表示为两个丰富数字之和的最大数量小于该限制,也不能通过分析进一步降低该上限。

找出所有正整数的总和,这些正整数不能写成两个数字的总和。“

我已经编写了这段代码,但出于某种原因它给了我4190404,根据Project Euler网站的说法,这是不正确的。

import numpy

def lowfactor(n):
    factors = [i for i in xrange(2, ceil(sqrt(n))) if n % i == 0]

    return list(numpy.unique(factors))

def factor(n):
    low = lowfactor(n)
    factors = [n / i for i in low]
    factors.reverse()
    factors = factors + low

    return factors

def isAbundant(n):
    factors = factor(n)
    factorSum = sum(factors)

    return factorSum > n

abundants = [i for i in xrange(28124) if isAbundant(i)]

sums = map(lambda n: False, range(28124))

for a in xrange(0, len(abundants)):
    for b in xrange(a, len(abundants)):
        if (abundants[a] + abundants[b]) < 28124:
            sums[abundants[a] + abundants[b]] = True

notsums = []
for i in xrange(28124):
    if not sums[i]:
        notsums.append(i)

sumofnotsums = sum(notsums)

print(sumofnotsums)

1 个答案:

答案 0 :(得分:0)

如果你计算因子(28)并将你的结果与欧拉给出的答案进行比较,你会看到问题。