[英]How to improve my slow nested for loops with itertools?
我的 Codewars 問題代碼太慢了,經過一些研究,我似乎必須使用 itertools 產品,但我不知道如何
現在這是我的代碼,它確實有效,但正如所說的那樣太慢了。
def list_squared(m, n):
results = []
for i in range (m, n):
sum = 0
for j in range (1, i+1):
if i % j == 0:
sum += j**2
if int(sum**(1/2))**2 == sum: #checking if number is a perfect square number
results.append([i, sum])
return results
在這種情況下,如何使用來自 itertools 的產品 function?
編輯:一些例子:
list_squared(1, 250) --> [[1, 1], [42, 2500], [246, 84100]]
list_squared(42, 250) --> [[42, 2500], [246, 84100]]
我應該得到一個這樣的清單。 給定我輸入的兩個整數 m, n (1 <= m <= n) 我想找到 m 和 n 之間的所有整數,其平方除數之和本身就是一個平方。
例如:42 的除數是:1、2、3、6、7、14、21、42。這些除數的平方是:1、4、9、36、49、196、441、1764。平方和除數是 2500 即 50 * 50,一個正方形!
如果“sum**(1/2)”的意思是“和的平方根”,它可能會自動翻譯成類似 exp((1/2)*log(sum)) 的東西,它會吃掉你。 早餐。 無鹽。
模運算 i % j 可能無濟於事,但這肯定是在狼與你結束后被蚊子叮咬。
這是你必須對你的算法進行長時間、認真審視的時候之一。
首先觀察完全平方的集合 <= n,對於所有非平凡的,比整數集合 <= n 小得多。
(提示:1, 4, 9, 16, 25, 36, 49, 64, ... 而不是 1, 2, 3, ..., 64, ...)
我還會看看我生成 j 值的方式。 乍一看,這些似乎是 i 值的因素。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.