python 素因子分解


在使用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對象哦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM