def num_of_divisors(x):
k=0
b=x
while x%2==0:
x=x//2
k=k+1
z=1
while x!=1:
for y in range(3,b,2):
a=0
while x%y==0:
x=x//y
a=a+1
z=z*(a+1)
return(z*(k+1))
def triangular(n):
return(n*(n+1)//2)
for n in range(1,10000):
jk=triangular(n)
if num_of_divisors(jk)>500:
print(triangular(n))
break
问题是:
通过添加自然数来生成三角数的序列。所以第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,1521:1,3,7,21
28:1,2,4,7,14,28
我们可以看到28是第一个超过五个除数的三角形数。
第一个三角形数的值超过500个除数是多少?
问题是找到超过500个除数的第一个三角数。
我单独检查了num_of_divisors()函数,它可以正常工作。我还检查了num_of_divisors(76576500),它正确返回576。
三角函数也能正常工作。
但是上面的程序没有运行。所以问题在于循环。但它是什么?我的意思是,它运行但没有任何反应。我认为它可能会很慢,所以我用1代替500,但它不起作用!有什么问题?