我试图解决Project Euler 的第 12 个问题。这就是问题:
三角形数的序列是通过将自然数相加而产生的。所以第 7 个三角形数将是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28。前十项将是:
1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
让我们列出前七个三角形数的因数:
- 1:1
- 3:1,3
- 6: 1,2,3,6
- 10: 1,2,5,10
- 15: 1,3,5,15
- 21: 1,3,7,21
- 28: 1,2,4,7,14,28
我们可以看到 28 是第一个有超过 5 个除数的三角形数。
第一个有超过 500 个除数的三角形数的值是多少?
我定义了两个函数来完成这项工作:
1) allfactor(x)
:这以列表形式为我们提供给定数字的所有因子。例子:allfactor(10)
给我们[1, 2, 5, 10]
2) TriangularNo(x)
: 这给了我们第 n 个三角形数。例子TriangularNo(5)
给了我们5
这是我写的完整代码:
facs=[]
def allfacof(x):
for i in range(1,int(x/2)+1):
if x%i==0:
facs.append(i)
else:
pass
facs.append(x)
return(facs)
def TriangularNo(x):
no=0
for i in range(1,x+1):
no=no+i
return(no)
a=0 # a will tell us the number of iterations
while True:
a+=1
N=TriangularNo(a)
length=(len(allfacof(N)))
if int(length)>=500:
print(N)
break
else:
pass
当我运行此代码时,我得到1378
的输出显然是错误的,因为len(allfacof(1378))
结果证明是8
而不是500
问题中的要求。
注意在while
循环中,我使用if int(length)>=500:
所以这意味着当我的代码运行时,length
以某种方式获得值 = 500 但是当我单独运行该函数时,它说它的长度为 8。
我只是无法找出错误。请帮我
问题是您使用的facs
是全局变量,而您只是附加到该项目。您应该使其成为 allfacof() 的成员,以便它在每个值之后清除。如果你仔细看看,facs
你会发现它等于
1, 1, 3, 1, 2, 3, 6, 1, 2, 5, 10 ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句