首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑错误项目euler 23?

逻辑错误项目euler 23?
EN

Stack Overflow用户
提问于 2014-01-19 11:03:29
回答 1查看 1.5K关注 0票数 0

我无法为以下内容获得正确的输出:

完全数是指它的适当除数之和与其数完全相等的一个数。例如,28的适当除数之和为1+2+4+7+ 14 = 28,这意味着28是一个完美数。 如果一个数n的适当除数之和小于n,则称为亏,如果这个数大于n,则称它为富足数。 由于12是最小的富足数,1+2+3+4+6= 16,可以写成两个富足数之和的最小数是24。通过数学分析,可以证明所有大于28123的整数都可以写成两个丰富数的和。然而,这个上限不能通过分析进一步降低,即使已知不能表示为两个丰富数之和的最大数小于这个极限。 找到所有正整数的和,这些正整数不能写成两个富足数的和。

代码语言:javascript
复制
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]])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-19 11:32:05

根据4179871,正确的解决方案是

下面是您想要修复代码的方法:

代码语言:javascript
复制
def check(n):
  s=0
  for i in xrange(1,n/2+1):
    if n%i==0:
      s+=i
  return s>n

l=28123 # upper bound of a number that is not the sum of 2 abundant numbers
sieve=[False]*l # sieve[i] == True means i IS the sum of 2 abundant numbers

abundant=[]
for i in xrange(12,l):
  if check(i):
    abundant.append(i)

for i in xrange(len(abundant)): # ranges here are such that you don't forget something like 2*abundant[-1]
  for j in xrange(i,len(abundant)):
    if abundant[i]+abundant[j]<l:
      sieve[abundant[i]+abundant[j]]=True 

print sum([i for i in xrange(len(sieve)) if not(sieve[i])])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21215881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档