2014-10-02 2 views
0

이것은 Project Euler의 23 번 문제에 대한 해결책입니다.왜이 Sage 프로그램이 제대로 작동하지 않습니까 (프로젝트 오일러 23)?

"완벽한 수는 해당 수의 합계가 정확하게 숫자와 같은 수입니다. 예를 들어, 적절한 수 28의 제수는 1 + 2 + 4 + 7 + 14 = 28이되어, 28이 완벽한 수임을 의미합니다. 이 합이 n을 초과하면 풍부하다고 불린다.

12는 가장 작은 숫자 인 1 + 2 + 3 + 4 + 6 = 16과 같이 두 개의 풍부한 숫자의 합으로 쓸 수있는 최소 숫자는 24이다. 수학적 분석 결과, 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) 

답변

0

당신은 오일러에 의해 주어진 대답하기 위해 당신은 인자 (28)를 계산하는 경우 문제를 확인하고 결과를 비교한다.

+0

예, 나는'약수를 사용하여 전환()' 기능을 제공하고 프로그램이 수정되었습니다. – Kytuzian