素数因素编辑

时间:2017-11-27 00:57:42

标签: python prime-factoring

我有这段代码

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]

每次删除一行时,都没有打印出来。即使有事应该。有没有一种更有效的方法来获得数字的所有主要因素而不使用任何库?

2 个答案:

答案 0 :(得分:2)

使用lambdamap

计算素数非常有趣
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”,“椭圆曲线分解”或“二次筛”。