繁体   English   中英

逻辑错误项目Euler 23?

[英]logical error project euler 23?

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

理想数字是其适当除数之和与该数字完全相等的数字。 例如,适当除数为28的总和将为1 + 2 + 4 + 7 + 14 = 28,这意味着28是一个理想数。

如果数字n的适当除数的总和小于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]])

正确的解决方法是4179871根据

这是您要修改代码的方式:

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])])

暂无
暂无

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

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