在使用python解決問題之前,我們先說一下,什么是素因子分解
所謂素因子分解就是,先找這個數的所有約數(約數即:a%b == 0,也就是a可以被b整除)
例如:20的約數集合為 [1, 2, 5, 10, 20]
那么素因子分解呢?
就是從最小的素數約數開始除,也就是這個除數要滿足兩個條件,一是約數,二是素數
那么這里20的最小的素約數是2,所以我們從2開始除,並且一直除到不能被整出為止:
num = 20
num = num / 2
num = 10(這里num依舊可以被2整除,所以再來一次)
num = num / 2
num = 5 (num很明顯除以2不能整除)
所以接下來被除數需要向后走,即5(再取下一個數為除數之前,要先判斷是否為素數,這里5為素數,如果不是素數比如4則需要繼續向后取)
num = num / 5
num = 1
至此,運算結束。所以,我們得到20的素因子集合為:[2, 2, 5]
那么接下來就是使用python實現的部分了
通過之前的解析過程,我們可以看到我們需要這么兩個小模塊:
1. 判斷數字是否是素數,如果數字本身是素數,那么直接返回1和它本身就可以了,因為素數不能被分解了,即 [1, num]
2. 我們需要獲得這個數的所有約數,以便於我們進行作除法
下面是這兩個部分的實現:
1 # 判斷是否是素數 2 def isprime(num): 3 count = num / 2 4 while count > 1: 5 if num % count == 0: 6 return False 7 count -= 1 8 else: 9 return True
1 # 得到所有的約數 2 def getfactors(num): 3 return [x for x in range(1, num) if num % x == 0]
通過上面兩個部分,我們就可以得到所有的基礎了,接下來就是運算了
1 def primefactor(num): 2 if isprime(num): 3 return [1,num] 4 factors = getfactors(num) 5 retList = [] 6 consult = num 7 for i in range(1,len(factors)): 8 if consult == 1: 9 break 10 while True: 11 if consult % factors[i] != 0: 12 break 13 if isprime(factors[i]): 14 consult /= factors[i] 15 retList.append(factors[i]) 16 else: 17 break 18 return retList
ok,最后調用primefactor就可以得到結果了,注意返回的是個list對象哦