我无法获得以下正确的输出:
完美数是一个数,其真因数之和正好等于该数。例如,28 的适当因数之和为 1 + 2 + 4 + 7 + 14 = 28,这意味着 28 是一个完美数。
一个数 n 如果其真因数之和小于 n 则称为不足数,如果该数之和超过 n 则称为丰富数。
由于 12 是最小的丰度数,1 + 2 + 3 + 4 + 6 = 16,所以可以写成两个丰度数之和的最小数是 24。通过数学分析,可以证明所有大于28123 可以写成两个丰富数之和。但是,即使已知不能表示为两个丰富数之和的最大数小于该上限,也无法通过分析进一步降低该上限。
找出所有不能写成两个丰富数之和的正整数之和。
def check(n):
s=0
for i in xrange(1,n/2+1):
if n%i==0:
s+=i
return s>n
l=100
sieve=[True]*l
for i in xrange(12):
sieve[i]=False
abundant=[]
for i in xrange(12,l):
if check(i):
abundant.append(i)
for i in xrange(len(abundant)-1):
for j in xrange(i+1,len(abundant)):
if abundant[i]+abundant[j]<l:
if sieve[abundant[i]+abundant[j]]==True:
sieve[abundant[i]+abundant[j]]=False
print abundant[i]+abundant[j]
print sum([i for i in xrange(len(sieve)) if sieve[i]])