如何解决23号工程

2024-07-03 06:48:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试解决项目Euler#23,但是我的代码太慢了(它也可能不起作用,因为我一年前就把它弄脏了)。 问题是:


一个完全数是一个数,它的固有因子之和正好等于这个数。例如,28的真因子之和是1+2+4+7+14=28,这意味着28是一个完美的数字。你知道吗

如果一个数n的真因子之和小于n,则称为亏数;如果这个数n的真因子之和大于n,则称为丰数

因为12是最小的富足数,1+2+3+4+6=16,所以可以写成两个富足数之和的最小数是24。通过数学分析可以看出,所有大于28123的整数都可以写成两个富足数的和。然而,即使已知不能表示为两个充裕数之和的最大数小于这个极限,通过分析也不能进一步降低这个上限。你知道吗

求所有不能写成两个充裕数之和的正整数之和。你知道吗


我已经重写这个程序很久了,得到了这个设计,休息了一年,修改了一点。你知道吗

def isAbundant(n):
    return (sum([fctr for fctr in range(1, n) if n % fctr == 0])>n)
abundants=[]

for i in range(28124):
  if isAbundant(i+1):
    abundants.append(i+1)
total=0
for i in range(12,28124):
  for j in abundants:
    if j <= i and not isAbundant(i-j) == True: total += i
print(total)

只是太滞后了。你知道吗


Tags: 项目代码inforifrange数字整数
1条回答
网友
1楼 · 发布于 2024-07-03 06:48:24

你可以简化你的函数:

def isAbundant(n):
    return (sum([fctr for fctr in range(1, n//2 +1) if n % fctr == 0])>n)

此外,底部循环将使用一些优化:

for j in abundants:
  for i in range(j,28124):  
    if not ((i-j) in abundants): total += i
print(total)

就在我的头顶。你知道吗

相关问题 更多 >