我是编程新手,我也是这个网站的新手。很抱歉,如果我的代码很愚蠢,而且我在浪费你的时间。我一直在尝试解决项目Euler Problem 12。在互联网的帮助下,我想出了一个算法,并在python中编写了一个代码。我试图概括它,以便它适用于所有数字不仅500.起初我有问题得到正确的输出,但是当我认为我修复它,它只会变得更糟,因为该程序需要永远运行。你能指出我做过的错误吗?
L = int(input("L="))
def number_of_divisors(n):
global divisors
global count
global p
divisors = 1
count = 0
if n%2 == 0:
while n%2 == 0:
count += 1
n=n/2
divisors = divisors * count
count = 0
p = 3
while n != 1:
while n%p == 0:
count +=1
n = n/p
p += 2
divisors *= (count + 1)
return divisors
def the_first_triangular_number_with_more_than_L_divisors(L):
global total_divisors
global n
total_divisors , n = 1 , 1
while total_divisors <= L:
s = number_of_divisors(n+1)
total_divisors *= s
total_divisors = s
n += 1
return (n*(n+1))/2
x = the_first_triangular_number_with_more_than_L_divisors(L)
print(x)
答案 0 :(得分:1)
这可能是一个无限循环。如果它进入循环并且s&lt; = L,它将无限期地重复,因为最后一行(可能是拼写错误)。
while total_divisors <= L:
s = number_of_divisors(n+1)
total_divisors *= s
total_divisors = s
这是一个非常密切反映你的答案的答案,你可以看看你是否完全被难倒: