如何查找数字的所有因子并列出列表中的因子。
输入:
>>>factors(72)
输出:
[2, 2, 2, 3, 3]
我已经删除了一些代码,因为这会获得很多视图,这是一个硬件问题所以我不希望它被复制。
答案 0 :(得分:1)
关于你的问题1:factoring is hard。这就是为什么它是许多加密算法的核心 - 我们目前还不知道快速计算大量数据的方法。
对于小数字,您的算法会这样做。对于稍微大一点的数字,我有same question ---显然 Pollard的Rho 是一个很好的算法。对于大数字,我们不知道。
现在问题2:
首先,在prime(n)
功能中,您无需检查if n%i==0
一直到n
。您只需要将其检查到sqrt(n)
,因为如果有(a,b)
个整数a * b = n
,那么其中一个整数必然小于或等于{{} 1}}。因此,您只需要查看sqrt(n)
。这为您节省了大量的计算费用。
这是您的sqrt(n)
功能:
factors
答案 1 :(得分:1)
def factors(n):
a = []
x = 2
while x * x <= n :
if n % x == 0:
a.append(x)
n /= x
else: x += 1
if n > 1: a.append(n)
return a
所有人都尽可能快地投票。
答案 2 :(得分:0)