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
問題是:通過將自然數生成項目euler 12 python代碼不運行,它是慢或什麼?
三角形號的序列。因此,第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是第一個有超過五個因子的三角形數字。
第一個三角形數值超過500個除數是多少?
問題是要找到超過500個因子的第一個三角形數字。
我分別檢查了num_of_divisors()函數,它工作正常。我也檢查了num_of_divisors(76576500),它正確返回576。
三角函數也可以正常工作。
但上述程序不運行。所以問題在循環中。但是它是什麼?我的意思是,它運行但沒有任何反應。我認爲它可能非常慢,所以我用1替換了500,但它不起作用!哪裏不對?
非常感謝!現在,這是一個愚蠢的錯誤... –
啊我修好了,現在它適用於像60這樣的小數字,但500是太多,它不打印... –
我假設你已經通過添加一個你的範圍。你現在可能需要看看你的算法,第一個有500個除數的三角形數字可能相當大(提示*它是*),而你的算法可能需要很長時間才能找到它......它最終會它確實找到了正確的數字...... –