[英]Python find Prime Factors
因此,我需要使用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。
除数可以获取所有可能的除数,就像您在代码中所做的一样。 传回的值
[ 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
除数。 这样,最终返回的值列表仅包含除数不是已经存在的因子的倍数。
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 ) ]
举例来说,假设n = 12个除数将是以下列表[2、3、4、6]
现在return
部分有点棘手,并且有充分的理由,不应以这种方式滥用列表理解。
因此,让我们将这部分变成一个实际的循环:
ans = []
for d in divisors:
for od in divisors:
if od != d:
if d % od == 0:
break
else: ans.append(d)
return ans
是的,其他都在正确的位置
继续该示例,该部分要做的是搜索除数列表,并查看除数是否可被除数所除。 如果是这样,我们将忽略该消息,否则将其保留。
最终结果是主要因素列表。
我在评论中还提到除数列表也可以使用以下方法生成:
divisors = [2] + [ d for d in xrange(3,int(n**2+1), 2) if n % d == 0]
该方法很有用,因为它避免包括除2以外的偶数,后者是唯一的偶数质数。 除数的大小也较小,这是因为我们只检查最大比该数字除以2的数字大二的平方根
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.