我有这段代码
def primefactor(n):
d = 2
factors = [ ]
while n > 1:
if n % d == 0:
primefactors.append(d)
n = n//d
else:
primefactors.append(d)
return factors
print(factor1(20))
[2, 2, 5]
每次删除一行时,都没有打印出来。即使有事应该。有没有一种更有效的方法来获得数字的所有主要因素而不使用任何库?
答案 0 :(得分:2)
使用lambda
和map
limit = 100
primelist = lambda n : [x for x in range(2, n) if not 0 in map(lambda z : x % z, range(2,x))]
print ", ".join(map(str, primelist(limit)))
答案 1 :(得分:1)
这是一个简单的程序来计算数字的素因数:
$ python
Python 2.7.13 (default, Mar 13 2017, 20:56:15)
[GCC 5.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def factors(n):
... f, fs = 2, []
... while f*f <= n:
... if n % f == 0:
... fs.append(f)
... n /= f
... else:
... f += 1
... fs.append(n)
... return fs
...
>>> factors(20)
[2, 2, 5]
如果 n 大,则有更好的方法来找到其因素:google表示“ Pollard rho”,“椭圆曲线分解”或“二次筛”。