Это мое решение проблемы 23 Project Euler, которая составляет:Почему эта программа Sage не работает должным образом (Project Euler 23)?
«Идеальное число - это число, для которого сумма его собственных делителей точно равна числу. Например, сумма правильного делители 28 будут равны 1 + 2 + 4 + 7 + 14 = 28, что означает, что 28 является идеальным числом.
Число n называется дефицитным, если сумма его собственных делителей меньше n, и это называемый обильным, если эта сумма превышает n.
Поскольку 12 - наименьшее обильное число, 1 + 2 + 3 + 4 + 6 = 16, наименьшее число, которое может быть записано в виде суммы двух обильных чисел, равно 24. By математический а nalysis, можно показать, что все целые числа больше 28123 могут быть записаны как сумма двух обильных чисел. Однако этот верхний предел еще не может быть уменьшен путем анализа, хотя известно, что наибольшее число, которое не может быть выражено как сумма двух обильных чисел, меньше этого предела.
Найти сумму всех положительных целых чисел, которые не могут быть записаны в виде суммы двух избыточных чисел.»
Я написал этот код, но по какой-то причине это дает мне 4190404
, которая, в соответствии с проектом сайт Эйлера неверен.
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)
Да, я перешел на использование 'делителей()' функция, предоставленная Sage, и программа была исправлена. – Kytuzian