【发布时间】:2019-07-31 08:38:50
【问题描述】:
我试图解决 Project Euler 的problem number 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 的三角形数 除数。
第一个大于五的三角形数的值是多少 一百个除数?
我定义了两个函数来完成这项工作:
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。
我只是无法找出错误。请帮帮我
【问题讨论】:
-
请注意,TriangularNo(n) 只是 n*(n+1)/2 避免了所有不必要的循环。
-
@Voo 聪明!谢谢
标签: python number-theory