繁体   English   中英

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

[英]Why doesn't this Sage program work properly (Project Euler 23)?

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

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

如果数字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)

如果计算出factor(28)并将结果与​​Euler给出的答案进行比较,就会看到问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM