[英]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.