Python 求质因数

标签 python python-2.7 prime-factoring

所以我需要使用 python 程序找到一个数字的素因数,并且我能够使用以下方法找到所有因数:

def primeFactors(n):
    list = []
    for x in range(2,n//2):
       if n % x == 0:
           list.append(x)
return list

但我不明白如何让程序忽略主要因素的倍数。

我找到了以下代码:

def primes(n):
divisors = [ d for d in range(2,n//2+1) if n % d == 0 ]
return [ d for d in divisors if \
         all( d % od != 0 for od in divisors if od != d ) ]

但我实际上并不明白它的作用,而且这是一个作业,所以我不能只是复制和粘贴。

所以我想知道是否有人可以引导我朝着我应该做的事情的正确方向前进。另外,我不能使用任何花哨的函数,它必须主要使用循环、列表和基本数学等内置内容来完成。我使用的是 python 2.7 而不是 3.0。

最佳答案

Divisors 获取所有可能的除数,与您在代码中所做的相同。

返回的值
[ d for d in divisors if \
         all( d % od != 0 for od in divisors if od != d ) ]

如果对于所有其他可能的除数 d 不能被任何其他除数整除,则保留除数 d。如果传递给它的所有值都为 true,则 all 返回 true,并且 all 内部的表达式只是检查给定除数 d 是否不是以下除数列表中的任何其他除数 od。这样,最终返回的值列表仅包含不是已存在因子倍数的除数。

关于Python 求质因数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33269193/

相关文章:

python - sklearn中ROC曲线的AUC

python - 有没有办法获得多条曲线与另一条曲线的所有交点?

python - python中的命名字典

python - 如何过滤Qtableview中的多列?

python - 在 python 中为嵌套列表建立索引

java - 在 JOptionPane 输出上一行打印 10 组素数

python - 如何避免太多 if - else block 在 python 中

algorithm - 哪种方法更好

algorithm - 在给定范围内有多少个数字具有最大数量的唯一质因数

python - gevent/requests 在发出大量 head 请求时挂起