在 Python 中查找数字的所有因子的最有效方法是什么?

2024-03-22

有人可以向我解释一种在 Python (2.7) 中查找数字的所有因子的有效方法吗?

我可以创建一个算法来执行此操作,但我认为它的编码很差并且需要很长时间才能生成大量结果。


from functools import reduce

def factors(n):    
    return set(reduce(list.__add__, 
                ([i, n//i] for i in range(1, int(n**0.5) + 1) if n % i == 0)))

这将很快返回一个数字的所有因子n.

为什么要以平方根为上限?

sqrt(x) * sqrt(x) = x。因此,如果两个因子相同,则它们都是平方根。如果你使一个因素变大,你就必须使另一个因素变小。这意味着两者之一始终小于或等于sqrt(x),因此您只需搜索到该点即可找到两个匹配因素之一。然后你可以使用x / fac1 to get fac2.

The reduce(list.__add__, ...)正在列出一些小清单[fac1, fac2]并将它们加入到一个长长的列表中。

The [i, n/i] for i in range(1, int(sqrt(n)) + 1) if n % i == 0如果相除时有余数,则返回一对因数n除以较小的值为零(它也不需要检查较大的值;它只需除以n由较小的一个。)

The set(...)外部是消除重复项,这只发生在完美的正方形上。为了n = 4,这将返回2两次,所以set摆脱其中之一。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中查找数字的所有因子的最有效方法是什么? 的相关文章

随机推荐