如何解决如何使用 itertools 改进我的缓慢嵌套 for 循环?
我的 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 中的 prodcut 函数?
编辑: 一些例子:
list_squared(1,250) --> [[1,1],[42,2500],[246,84100]]
list_squared(42,250) --> [[42,84100]]
我应该得到一个这样的清单。 给定我输入的两个整数 m,n (1
例如:42 的除数是:1、2、3、6、7、14、21、42。这些除数的平方是:1、4、9、36、49、196、441、1764。总和除数的平方是 2500,也就是 50 * 50,一个平方!
解决方法
如果“sum**(1/2)”的意思是“sum的平方根”,它可能会被自动翻译成exp((1/2)*log(sum))之类的东西,它会吃你还活着。早餐。无盐。
模运算 i % j 可能无济于事,但那肯定是在狼和你结束后蚊虫叮咬。
这是您必须仔细研究算法的时间之一。
首先观察完美平方集
(提示:1,4,9,16,25,36,49,64,... 而不是 1,2,3,...,...)
我还会看看我生成 j 值的方式。乍一看,这些似乎是 i 值的因子。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。