簡體   English   中英

如何使用 itertools 改進我的慢速嵌套 for 循環?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM